echo "perp -t ../data/ReviewTest.text" | ./eva -b ../data/6.binlm
我会得到我想要的东西。 但是,当我尝试这个run.py
时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”和“|”
时,我可以使用子进程。感谢。
这是我在SO中提出的第三个问题,前两个问题都被视为重复。然而,在我问之前我真的很努力,但由于我不是母语,我不知道如何改变很多表达,我不能总是找到我想要的东西。所以如果这是另一个重复,我会向前道歉....
答案 0 :(得分:2)
我认为这可能会达到你想要的效果(它应该完全重现你问题中列出的第一个命令行):
>>> import subprocess
>>> e = 'echo "perp -t ../data/ReviewTest.text | ./eva -b ../data/6.binlm'
>>> subprocess.call(e, shell=True)
“|”是一个shell元字符,因此您需要使用subprocess.call
调用shell=True
。
在命令行中,您将字符串"perp -t ../data/ReviewTest.text"
作为echo
的第一个也是唯一的参数传递,因此您需要传递相同的字符串,而不仅仅是{ {1}}参数字符串。
答案 1 :(得分: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的说明。