os.system()和subprocess.call()的行为不同

时间:2018-10-18 08:41:31

标签: python subprocess os.system

我有一个脚本,该脚本使用特定文件启动Scribus,并在Scribus内部自动运行Python脚本。

我现在想将更多选项传递给Scribus脚本,但是这样做的时候,我偶然发现os.system()(我以前使用的)和subprocess.call()(我想要的)之间有一个奇怪的区别喜欢现在使用,因为通话变得越来越复杂。

原始命令是:

os.system('scribus -g -py /home/ale/src/bin_etc/scribus-a6-to-a4-pdf.py -pa single -- funktionen.sla')

新的是:

file = 'funktionen.sla'
arguments = ['-pa', 'single']

call(['scribus', '-g', '-py', '/home/ale/src/bin_etc/scribus-a6-to-a4-pdf.py'] + arguments + ['--', file])

尽管第一个命令可以正常运行(并且single命令在 inner 脚本中可以识别),但是在运行新的call()命令时,Scribus告诉我可以找不到打开的文件。

对我来说,这两个命令看起来相同。有人可以帮忙找出区别吗?

P.S .:作为补充,这是从命令行运行Scribus脚本的文档:

https://wiki.scribus.net/canvas/Command_line_scripts

1 个答案:

答案 0 :(得分:0)

正如我在对问题的评论中所写的那样,我没有注意到该问题已经具有正确的代码。

问题在于,当您将代码从os.system()迁移到subprocess.call()时,如果您有个选项结束--),则必须小心您不要在两个破折号之间留下空格:'-- '由外壳自动修剪(由os.system()而不是subprocess.call()运行,它将按原样传递选项,并且最终程序将把它理解为具有您要读取的文件的值的另一个选项(以空格命名)。