5

我尝试使用 Python 调用命令行来执行一些文件。但是,当有一个同时包含echo和的命令行时|subprocess.call似乎不能很好地工作。就像我跑步时一样:

echo "perp -t ../data/ReviewTest.text" | ./eva -b ../data/6.binlm

我会得到我想要的。但是,当我尝试这个时:

import subprocess
e=["echo","\"perp", "-t", "../data/R.text\"", "|", "./eva", "-b", "../data/6.binlm"]
subprocess(e)

我将得到除了命令行中显示的 echo 之外的所有内容,例如:

".prep -t ..data/ReviewTest.text" | ./eva -b ../data/6.binlm

似乎在subprocess.call(),当有一个时echo,它后面的所有东西都会被扔到命令行上。

我希望subprocess当命令同时包含echo和时,我可以使用一些解决方案|

4

2 回答 2

3

我认为这可能会达到您正在寻找的效果(它应该完全重现您的问题中列出的第一个命令行):

>>> import subprocess
>>> e = 'echo "perp -t ../data/ReviewTest.text | ./eva -b ../data/6.binlm'
>>> subprocess.call(e, shell=True)
  1. “|” 是一个 shell 元字符,所以你需要调用subprocess.callwith shell=True

  2. 在命令行中,您将字符串"perp -t ../data/ReviewTest.text"作为 的第一个也是唯一的参数echo传递,因此您需要传递相同的字符串,而不仅仅是subprocess.call参数字符串中的单个组件。

于 2013-02-26T22:30:20.493 回答
1

管道|是一个 shell 结构,这意味着该命令需要作为 shell 的输入运行。这意味着设置shell=True何时subprocess.call()被调用。

import subprocess
subprocess.call("""echo "perp -t ../data/ReviewTest.text" | ./eva -b ../data/6.binlm""", shell=True)

Python 文档中有关于使用shell=True的说明。

于 2013-02-26T22:29:35.760 回答