Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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脚本运行bash命令_Python_Bash_Subprocess - Fatal编程技术网

在特定目录中从python脚本运行bash命令

在特定目录中从python脚本运行bash命令,python,bash,subprocess,Python,Bash,Subprocess,我试图编写一个Python脚本,在多个目录中递归运行bash中的一个程序,并将输出保存(现在只显示)到日志文件中 问题是,当我试图从主目录运行该应用程序时,仅仅给出输入文件的完整路径,它就会崩溃,所以我通常直接在包含输入文件的目录中运行它。我曾尝试使用os.popen()和pexpect来实现这一点,但我认为这里最合适的是子流程 我的代码: import subprocess, from subprocess import Popen, PIPE subprocess.Popen("$fp

我试图编写一个Python脚本,在多个目录中递归运行bash中的一个程序,并将输出保存(现在只显示)到日志文件中

问题是,当我试图从主目录运行该应用程序时,仅仅给出输入文件的完整路径,它就会崩溃,所以我通常直接在包含输入文件的目录中运行它。我曾尝试使用os.popen()和pexpect来实现这一点,但我认为这里最合适的是子流程

我的代码:

import subprocess,
from subprocess import Popen, PIPE 

subprocess.Popen("$fp "+pcr+" "+dat, cwd=path+dirs[0], stdout=PIPE)
print output.stdout.read()
其中,pcr和dat是输入文件的名称

当我尝试运行它时,我得到以下错误:

Traceback (most recent call last):
File "file_ed.py", line 47, in <module>
subprocess.Popen("$fp "+pcr+" "+dat, cwd=retval, stdout=PIPE)
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
 File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
回溯(最近一次呼叫最后一次):
文件“File_ed.py”,第47行,在
subprocess.Popen(“$fp”+pcr+”+dat,cwd=retval,stdout=PIPE)
文件“/usr/lib/python2.7/subprocess.py”,第710行,在__
错误读取,错误写入)
文件“/usr/lib/python2.7/subprocess.py”,第1335行,在执行子进程中
引发子对象异常
OSError:[Errno 2]没有这样的文件或目录

这个问题的原因是什么?如何解决它?

我认为您的问题是希望将
pcr
dat
作为参数传递给程序,并且您认为空格可以为您解决这个问题–但Python不是bash。只需使用一个数组,它就可以工作:

subprocess.Popen([fp, pcr, dat], cwd=path+dirs[0], stdout=PIPE)
您得到“没有这样的文件或目录”的原因是:Python正在寻找一个名为
“$fp”+pcr+”“+dat
”的程序,也就是说,它假定空格(和美元符号,除非您将其作为伪代码占位符)是程序名的一部分。该错误告诉您没有具有此名称的程序

然而,很难猜测您的意思,因为您的代码片段不完整。我真的不知道
$fp
pcr
dat
是什么意思


还可以查看子流程模块文档中的示例。

您试图访问的文件或运行的命令不存在。例如,可能没有命令
$fp
。有关在子流程中使用环境变量的信息,请参阅。运行一系列bash命令的最佳方法是编写bash脚本。你的方法很难做到。对于这种含糊不清的
$fp-dat
pcr
表示抱歉。最后两个字符串如我所说,包含我要运行的应用程序的输入文件
$fp
是bash中应用程序的符号链接,但我认为它不会以这种方式工作,所以我将其更改为完整路径。我已经用pexpect解决了这个问题:
child=pexpect.run('/usr/local/bin/FullProf_Suite/fp2k'+pcr+'+dat,logfile=sys.stdout,cwd=path+dirs[0])
其中“path”和“dirs[0]”只是构成我工作目录路径的字符串。谢谢回复!