Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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执行shell命令_Python_Append_Subprocess - Fatal编程技术网

从python执行shell命令

从python执行shell命令,python,append,subprocess,Python,Append,Subprocess,我试图编译一组行并执行它们,然后将输出附加到文本文件中。我没有编写同样的东西,而是使用python脚本在后台编译和执行 import subprocess subprocess.call(["ifort","-openmp","mod1.f90","mod2.f90","pgm.f90","-o","op.o"]) subprocess.call(["nohup","./op.o",">","myout.txt","&"]) 正在使用ifort编译器编译程序pgm.f90,但输出

我试图编译一组行并执行它们,然后将输出附加到文本文件中。我没有编写同样的东西,而是使用python脚本在后台编译和执行

import subprocess
subprocess.call(["ifort","-openmp","mod1.f90","mod2.f90","pgm.f90","-o","op.o"])
subprocess.call(["nohup","./op.o",">","myout.txt","&"])
正在使用ifort编译器编译程序
pgm.f90
,但输出未附加到
myout.txt
。相反,它将输出附加到
nohup.out
,即使在python脚本中指定了
“&”
,程序也不会在后台运行

我在这里犯了什么明显的错误


提前感谢

您可以使用
Popen()
和参数
shell=True
调用子流程,就像在shell中一样:

subprocess.Popen("nohup ./op.o > myout.txt &", shell=True)

这个问题是,当您以元素列表的形式提供参数时,子流程库会绕过shell并使用exec syscall直接运行您的程序(在您的例子中是“nohup”)。因此,shell不会解释“>”和“&”操作符来重定向输出并在后台运行,而是将它们作为文本参数传递给nohup命令

您可以告诉子流程通过shell执行您的命令,但这会启动整个额外的shell实例,这可能是浪费。对于解决方法,请使用子流程中的内置重定向功能,而不是使用shell原语:

p = subprocess.Popen(['nohup', "./op.o"],
                     stdout=open('myout.txt', 'w'))
# process is now running in the background.
# if you want to wait for it to finish, use:
p.wait()
# or investigate p.poll() if you want to check to see if
# your process is still running.

有关更多信息:

我将如何处理此问题?