Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python os.system()和subprocess.call()的行为不同_Python_Subprocess_Os.system - Fatal编程技术网

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

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')

我有一个脚本,它使用特定文件启动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])

虽然第一个命令工作正常(内部脚本中可以识别
单个
命令),但在运行新的
call()
命令时,Scribus告诉我它找不到打开的文件

在我看来,这两个命令看起来完全相同。有人能帮忙找出区别吗

注意:作为补充,以下是从命令行运行Scribus脚本的文档:


当我在问题的评论中写道,我没有注意到问题已经有了正确的代码


问题是,当您将代码从
os.system()
迁移到
subprocess.call()
,如果您有一个结束选项(
--
),您必须注意不要在两个破折号周围留下空格:
'--
由shell自动修剪(由
os.system()运行)
但不是通过
subprocess.call()
,它将按原样传递选项,最终程序将其理解为另一个选项(用空格命名),具有您要读取的文件的值。

Scribus告诉我它找不到打开的文件请发布准确的错误消息。同时使用检查状态的
check\u call
。另一个区别是缺少
shell=True
(无论如何必须避免)好的,我发现了错误!在发布此问题时,我稍微改进了
call()
,现在它确实起作用了:更改是:from
+['-'+文件]
+['-',文件]
。对不起,上面的
调用()
命令确实有效。我会暂时保留这个问题,然后将其删除…(或者管理员可以在匆忙删除之前删除)。很抱歉发出噪音。确定^2:我已经找到了以前没有找到错误的原因:
['-',文件]
(第二个破折号后面的空格不起作用(但是连接字符串时当然需要空格)……我想知道是否值得留下这个问题,让人们在将命令从
system()
转换为
call()
时意识到
'-'
'-'
之间的区别。。。