我试图通过使用子进程的Python脚本来获得一个简单的嵌套管道,但是我得到的输出没有意义。
我尝试将diff
的输出重定向到grep
,并从grep
重定向到wc
,然后检查输出,但是没有运气。
import subprocess
diff = subprocess.Popen(("diff", "-y", "--suppress-common-lines", "file1.py", "file2.py"), stdout=subprocess.PIPE)
diff.wait()
grep = subprocess.Popen(("grep", "'^'"), stdin=diff.stdout, stdout=subprocess.PIPE)
grep.wait()
output = subprocess.check_output(('wc', '-l'), stdin=grep.stdout)
print(output)
我希望这导致file1.py
和file2.py
之间的行数有所不同,但是我得到了
b' 0\n'
在命令行中,当我运行diff -y --suppress-common-lines file1.py file2.py | grep '^' | wc -l
时,它将返回一个整数。
答案 0 :(得分:1)
如果您在python子进程调用中这样做
("grep", "'^'")
在命令行中,您的意思是:
grep "'^'"
因此grep
的参数是一个3个字符的字符串。如果您不是那个意思,只需做
("grep", "^")
很可能会解决您的问题。
PS:类似地,在subprocess.Popen()
的参数中,不要期望任何shell换码,变量替换等工作。这些是外壳程序功能,外壳程序将在传递给可执行文件之前对其进行按摩。因此,现在您必须自己按摩。