【问题标题】:Popen is no able to process a command that runs in shellPopen 无法处理在 shell 中运行的命令
【发布时间】:2011-05-29 13:31:49
【问题描述】:

我已经阅读了关于同一论点的先前问题,但我真的还没有弄清楚。

我正在尝试从命令行运行一个没有问题的命令:

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

我也尝试过不同的解决方案,例如

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

但似乎没有任何效果。我也试图把绝对路径放到 ush 但什么都没有...... 有人可以解释一下我做错了什么吗?

提前致谢,上午。

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

which ush

我明白了

ush: aliased to nocorrect /projects/aaaaaaa/local/ush/latest/ush.py

但是为什么它会工作呢???

!!!谢谢大家的解答!!!

【问题讨论】:

  • ush -o PPP -p PRD -n log 'pwd' 在命令行中工作吗?
  • 当然,响应在 PPP:prd:lgsprdppp:/ama/log/PRD/ppp 上面
  • 请改进格式。插入代码块时,使用{}
  • 你的import声明是什么样的?
  • 嗨,这里是我的导入... from subprocess import Popen, PIPE

标签: python subprocess popen


【解决方案1】:
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"])

【讨论】:

  • 您好,感谢您回答 stringa = Popen(["ush", "-o", "PPP", "-p", "PRD", "-n", "log", " pwd"], stdout=PIPE, stdin=PIPE).communicate()[0] 得到相同的结果 OSError: [Errno 2] No such file or directory
【解决方案2】:

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

【讨论】:

  • 这肯定是一个别名,也许是因为这个原因......如果我制作一个 shell 脚本并在其内部调用 ush 怎么办?而不是我从 python 调用 shell 脚本,它应该工作吗?
猜你喜欢
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2014-01-18
  • 1970-01-01
相关资源
最近更新 更多