Gre*_*reg 12 python subprocess popen
我可以在Linux的命令行中正常运行:
$ tar c my_dir | md5sum
Run Code Online (Sandbox Code Playgroud)
但是当我尝试用Python调用它时出现错误:
>>> subprocess.Popen(['tar','-c','my_dir','|','md5sum'],shell=True)
<subprocess.Popen object at 0x26c0550>
>>> tar: You must specify one of the `-Acdtrux' or `--test-label' options
Try `tar --help' or `tar --usage' for more information.
Run Code Online (Sandbox Code Playgroud)
mde*_*ous 14
您还必须使用subprocess.PIPE拆分命令,shlex.split()在某些情况下应该用来防止奇怪的行为:
from subprocess import Popen, PIPE
from shlex import split
p1 = Popen(split("tar -c mydir"), stdout=PIPE)
p2 = Popen(split("md5sum"), stdin=p1.stdout)
Run Code Online (Sandbox Code Playgroud)
但是要创建存档并生成其校验和,您应该使用Python内置模块tarfile而hashlib不是调用shell命令.
好的,我不确定为什么,但这似乎可行:
subprocess.call("tar c my_dir | md5sum",shell=True)
Run Code Online (Sandbox Code Playgroud)
有人知道为什么原始代码不起作用吗?
| 归档时间: |
|
| 查看次数: |
16800 次 |
| 最近记录: |