Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.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 Popen无法处理在shell中运行的命令_Python_Subprocess_Popen - Fatal编程技术网

Python Popen无法处理在shell中运行的命令

Python Popen无法处理在shell中运行的命令,python,subprocess,popen,Python,Subprocess,Popen,我已经阅读了同一论点上的问题,但我还没有弄明白 我正在尝试运行一个命令,该命令可以在命令行中正常工作: xyz@klm:~/python-remoteWorkspace/PyLogParser/src:18:43>ush -o PPP -p PRD -n log 'pwd' 6:43PM PPP:prd:lgsprdppp:/ama/log/PRD/ppp 但当我在python中执行相同操作时,总是会出现错误: stringa = Popen(["ush -o PPP -p PRD -n

我已经阅读了同一论点上的问题,但我还没有弄明白

我正在尝试运行一个命令,该命令可以在命令行中正常工作:

xyz@klm:~/python-remoteWorkspace/PyLogParser/src:18:43>ush -o PPP -p PRD -n log 'pwd'
6:43PM PPP:prd:lgsprdppp:/ama/log/PRD/ppp
但当我在python中执行相同操作时,总是会出现错误:

stringa = Popen(["ush -o PPP -p PRD -n log 'pwd'"], stdout=PIPE, stdin=PIPE).communicate()[0]
这里是错误

Traceback (most recent call last):   File "getStatData.py", line 134, in <module>
    retrieveListOfFiles(infoToRetList)   File "getStatData.py", line 120, in retrieveListOfFiles
    stringa = Popen(["ush -o PPP -p PRD -n log 'pwd'"], stdout=PIPE, stdin=PIPE).communicate()[0]   File "/opt/python-2.6-64/lib/python2.6/subprocess.py", line 595, in __init__
    errread, errwrite)   File "/opt/python-2.6-64/lib/python2.6/subprocess.py", line 1092, in _execute_child
    raise child_exception OSError: [Errno 2] No such file or directory
但似乎什么都不管用。我也尝试过将绝对路径设置为ush,但什么都没有。。。 谁能解释一下我做错了什么

我先谢谢你

编辑: 当我这样做的时候,我有一件奇怪的事情发生

which ush
我明白了

但是为什么它会起作用呢

!!!谢谢大家的回答

Popen(["ush", "-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])
应该是对的。shell命令中围绕
'pwd'
的额外引号使其成为单个参数,但引号实际上并没有传递。由于您已经在拆分参数,请将多余的引号去掉


显然(在OP的更新中)
ush
是一个shell别名。因此,它只在壳中膨胀;在其他任何地方,它都不起作用。自己扩展它:

Popen(["nocorrect", "/projects/aaaaaaa/local/ush/latest/ush.py",
       "-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])
应该是对的。shell命令中围绕
'pwd'
的额外引号使其成为单个参数,但引号实际上并没有传递。由于您已经在拆分参数,请将多余的引号去掉


显然(在OP的更新中)
ush
是一个shell别名。因此,它只在壳中膨胀;在其他任何地方,它都不起作用。自己扩展它:

Popen(["nocorrect", "/projects/aaaaaaa/local/ush/latest/ush.py",
       "-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])

如果系统上的
ush
是别名,则popen将不起作用。popen需要一个可执行文件作为第一个参数:绝对路径或路径中某物的名称。

如果系统上的
ush
是别名,popen将无法工作。popen需要一个可执行文件作为第一个参数:绝对路径或路径中某物的名称。

ush-o PPP-p PRD-n log“pwd”从命令行起作用吗?当然,响应在这里PPP:PRD:lgsprdppp:/ama/log/PRD/PPP请改进格式。插入代码块时,请使用
{}
。您的
import
语句是什么样的?您好,这里是我的import。。。在子流程导入Popen中,pipedo
ush-o PPP-p PRD-n log'pwd'
从命令行工作吗?当然,响应在PPP:PRD:lgsprdppp:/ama/log/PRD/pppp上方请改进格式。插入代码块时,请使用
{}
。您的
import
语句是什么样的?您好,这里是我的import。。。从子流程导入Popen,PIPEHi,感谢您回答stringa=Popen([“ush”、“-o”、“PPP”、“-p”、“PRD”、“-n”、“log”、“pwd”]、stdout=PIPE、stdin=PIPE)。communicate()[0]得到相同的结果OSError:[Errno 2]没有这样的文件或目录hi,感谢您回答stringa=Popen([“ush”、“-o”、“PPP”、“-p”、“-p”、“PRD”、“-n”、“log”、“pwd”],stdout=PIPE,stdin=PIPE).communicate()[0]得到相同的结果。错误:[Errno 2]没有这样的文件或目录它肯定是一个别名,可能是因为这个原因。。。如果我制作一个shell脚本,在它的内部调用ush呢??然后我从python中调用shell脚本,它应该工作吗?它肯定是一个别名,可能就是因为这个原因。。。如果我制作一个shell脚本,在它的内部调用ush呢??然后我从python中调用shell脚本,它应该工作吗?
Popen(["nocorrect", "/projects/aaaaaaa/local/ush/latest/ush.py",
       "-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])