在 Python 子进程中运行 $(Linux commnad)。运行?

问题描述 投票:0回答:2

我跑:

proc = subprocess.run(["echo", "$(echo 1111dGUv+rG551123eFwBhCMde6BIS90c3AAAAA= | base64 -d)"], check=True, stdout=subprocess.PIPE)
print(proc.stdout)

得到:

b'$(echo 1111dGUv+rG551123eFwBhCMde6BIS90c3AAAAA= | base64 -d)\n'

但是希望在 subprocess.run 中执行

$(echo 1111dGUv+rG551123eFwBhCMde6BIS90c3AAAAA= | base64 -d)
然后传递给
echo
。所以结果可能是:

�]ute/����]v��p�u�!/tsp

如何在 subprocess.run() 中实现?

python python-3.x shell subprocess
2个回答
1
投票

使用

shell=True
,在这种情况下你不需要这个额外的
echo

proc = subprocess.run(["echo 1111dGUv+rG551123eFwBhCMde6BIS90c3AAAAA= | base64 -d"], check=True, shell=True, capture_output=True)
print(proc.stdout)

你也可以像这样用 Python 制作这个管道:

echo = subprocess.Popen(('echo', '1111dGUv+rG551123eFwBhCMde6BIS90c3AAAAA='), stdout=subprocess.PIPE)
output = subprocess.check_output(('base64', '-d'), stdin=echo.stdout)
echo.wait()

print(output)

0
投票

shell=True
参数传递给
subprocess.run()
函数,像这样:


proc = subprocess.run('echo "$(echo 1111dGUv+rG551123eFwBhCMde6BIS90c3AAAAA= | base64 -d)"', 
                      shell=True, 
                      check=True, 
                      stdout=subprocess.PIPE)
print(proc.stdout)
© www.soinside.com 2019 - 2024. All rights reserved.