gpt4 book ai didi

python - 在长子进程调用(python)中使用 PIPE 不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 18:19:27 24 4
gpt4 key购买 nike

我正在尝试执行以下命令(通过 python 脚本下载 Calibre):

sudo -v && wget -nv -O- https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py | sudo python -c "import sys; main=lambda:sys.stderr.write('下载失败\n'); exec(sys.stdin.read()); main()"

根据此处有关如何进行 PIPE 的一些答案,我一直在这样做:

import subprocess
from subprocess import Popen, PIPE
wget = subprocess.Popen(["sudo -v wget -nv -O- https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py"], stdout=PIPE)
run = subprocess.Popen(["sudo python -c "import sys; exec(sys.stdin.read()); main()""], stdin=wget.stdout)

我尝试过改变很多事情,但没有任何效果。错误太多,无法放在这里。有人能纠正这个吗?提前谢谢了。

我得到的只是第一个

最佳答案

当你有参数时,你需要将其分成一个列表,例如

wget = subprocess.Popen(["wget -nv -O- https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py"]) 

(**No such file or directory** error, because it looks for that whole string as a command/file)

需要成为:

subprocess.Popen(['wget', '-nv', '-O-', 'https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py'])
<subprocess.Popen object at 0x10e203950>

您还可以使用shlex.split()为您拆分命令,例如

>>> import shlex
>>> shlex.split('wget -nv -O- https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py')
['wget', '-nv', '-O-', 'https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py']

引用号。 https://docs.python.org/2/library/subprocess.html#popen-constructor

您还有“sudo python -c”import sys; exec(sys.stdin.read()); main()"",我认为这是 Not Acceptable 语法,因为引号内有引号(里面的引号关闭了第一个引号),所以尝试 'sudo python -c "import sys; exec(sys.stdin.read()); main()"' 用单引号代替,这样你就不必转义里面的引号!

关于python - 在长子进程调用(python)中使用 PIPE 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24410735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com