【问题标题】:Call a command line which includes both "echo" and "|" [duplicate]调用包含“echo”和“|”的命令行[复制]
【发布时间】:2013-02-12 13:40:58
【问题描述】:

我尝试使用 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时,它后面的所有东西都会被扔到命令行上。

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

【问题讨论】:

    标签: python shell subprocess


    【解决方案1】:

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

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

    2. 1234563 .

    【讨论】:

    • 可以用shell=False吗?
    • @oarthiban 不,shell 需要解释管道元字符'|'
    【解决方案2】:

    管道| 是一个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=True 的说明。

    【讨论】:

      猜你喜欢
      • 2020-09-06
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 2019-05-10
      相关资源
      最近更新 更多