我有GUI,如果我按一个按钮“process”调用一个需要一个命令行参数的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脚本的别名
这很好但现在我想通过使用来自tkFileDailog()模块的askfilename()func来选择我选择的文件。我怎么能这样做?
我想这样做:
def bifcall():
name13= askopenfilename()
subprocess.Popen(['chbif', name13],shell=True)
但是,如果我使用它,它会抛出一个错误,说它没有一个命令行参数,即文件名
答案 0 :(得分:2)
如果你传递shell=True
,第一个参数应该是一个字符串,它将被解释为shell会解释它。如果shell=False
,那么第一个参数应该是一个列表,哪种类型绕过shell。
这是对另一个问题的回答:https://stackoverflow.com/a/15109975/451201
答案 1 :(得分: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)。