Python os.system()和subprocess.call()的行为不同
我有一个脚本,它使用特定文件启动Scribus,并在Scribus中自动运行Python脚本 我现在想向Scribus脚本传递更多选项,但在这样做的同时,我偶然发现了Python os.system()和subprocess.call()的行为不同,python,subprocess,os.system,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')
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])
虽然第一个命令工作正常(内部脚本中可以识别
单个命令),但在运行新的call()
命令时,Scribus告诉我它找不到打开的文件
在我看来,这两个命令看起来完全相同。有人能帮忙找出区别吗
注意:作为补充,以下是从命令行运行Scribus脚本的文档:
当我在问题的评论中写道,我没有注意到问题已经有了正确的代码
问题是,当您将代码从os.system()
迁移到subprocess.call()
,如果您有一个结束选项(--
),您必须注意不要在两个破折号周围留下空格:'--
由shell自动修剪(由os.system()运行)
但不是通过subprocess.call()
,它将按原样传递选项,最终程序将其理解为另一个选项(用空格命名),具有您要读取的文件的值。Scribus告诉我它找不到打开的文件请发布准确的错误消息。同时使用检查状态的check\u call
。另一个区别是缺少shell=True
(无论如何必须避免)好的,我发现了错误!在发布此问题时,我稍微改进了call()
,现在它确实起作用了:更改是:from+['-'+文件]
到+['-',文件]
。对不起,上面的调用()
命令确实有效。我会暂时保留这个问题,然后将其删除…(或者管理员可以在匆忙删除之前删除)。很抱歉发出噪音。确定^2:我已经找到了以前没有找到错误的原因:['-',文件]
(第二个破折号后面的空格不起作用(但是连接字符串时当然需要空格)……我想知道是否值得留下这个问题,让人们在将命令从system()
转换为call()
时意识到'-'
和'-'
之间的区别。。。