使用subprocess.Popen传递命令行参数
我有一个图形界面(GUI),当我按下一个“处理”按钮时,它会调用一个需要一个命令行参数的Python脚本。所以我用了subprocess.Popen,代码是这样的:
subprocess.Popen(['chbif /home/vnandak/Work/VS30_Cradle/SV000_sv000/cradle_vs30_dkaplus01_fwd_dl140606_fem140704_v00_mod1.bif'],shell=True)
这里的chbif是这个.py脚本的别名
这个方法运行得很好,但现在我想通过使用tkFileDialog模块里的askfilename()函数来选择我想要的文件。我该怎么做呢?
我想过这样做:
def bifcall():
name13= askopenfilename()
subprocess.Popen(['chbif', name13],shell=True)
但是如果我这样做,就会报错,提示缺少一个命令行参数,也就是文件名。
2 个回答
1
因为如果你使用shell=True,作为第一个参数你只能用一个字符串。
试着把
subprocess.Popen(['chbif', name13],shell=True)
改成
subprocess.Popen('chbif ' + name13,shell=True)
但是出于安全考虑,不推荐使用shell=True(详细信息请查看https://docs.python.org/2/library/subprocess.html#frequently-used-arguments)。
3
如果你传入 shell=True
,那么第一个参数应该是一个字符串,这个字符串会像在命令行中那样被解释。如果你传入 shell=False
,那么第一个参数应该是一个列表,这样就可以绕过命令行的解释。
这里有个回答解释得很好,可以看看: https://stackoverflow.com/a/15109975/451201