Python 调用一个命令行,该命令行包括;“回声”;及|&引用;

Python 调用一个命令行,该命令行包括;“回声”;及|&引用;,python,shell,subprocess,Python,Shell,Subprocess,我尝试使用Python调用命令行来执行一些文件。但是,当命令行同时包含echo和|时,子进程.call似乎工作得不太好。喜欢 当我跑步时: echo "perp -t ../data/ReviewTest.text" | ./eva -b ../data/6.binlm 我会得到我想要的。 但是,当我尝试这一点时: import subprocess e=["echo","\"perp", "-t", &

我尝试使用Python调用命令行来执行一些文件。但是,当命令行同时包含
echo
|
时,
子进程.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
时,我希望有一些解决方案可供我使用
子进程
,管道
是一个shell构造,这意味着该命令需要作为shell的输入运行。这意味着在调用
subprocess.call()
时设置
shell=True

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

Python文档中有一些关于使用的注释。

我认为这可能会达到您想要的效果(它应该准确地再现您问题中列出的第一个命令行):

  • “|”是一个shell元字符,因此需要调用
    子进程。使用
    shell=True调用

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


  • 是否可以使用shell=False?@oarthiban否,需要shell来解释管道元字符“|”
    >>> import subprocess
    >>> e = 'echo "perp -t ../data/ReviewTest.text | ./eva -b ../data/6.binlm'
    >>> subprocess.call(e, shell=True)