我正在尝试使用subprocess.popen对kafka使用者组运行检查并记录其状态,但它似乎没有等待所有命令运行。它没有给我任何标准输出,但它也返回一个0的退出代码。
prompt = ["cd", "~/path/to/kafka_2.11-2.1.0;", "pwd;", "./bin/kafka-consumer-groups.sh",
"--bootstrap-server", "localhost:9092", "--describe", "--group", "groupname"]
response = subprocess.run(prompt, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
shell=True, check=True)
print(response)
印刷品:
CompletedProcess(args=['cd', '~/path/to/kafka_2.11-2.1.0;', 'pwd;', './bin/kafka-consumer-groups.sh', '--bootstrap-server', 'localhost:9092', '--describe', '--group', 'groupname'], returncode=0, stdout=b'', stderr=b'')
pwd命令主要是测试它是否会返回任何类型的stout,它不会被保留。
我已经在文档中查看了子流程,但没有看到任何迹象表明它无法捕获多个标准输出。另外,根据日志,在运行过程中,completedprocess将在不到10ms的时间内返回 cd ~path/to/kafka_2.11-2.1.0; pwd; ./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group groupname
在我的机器上大约需要10-15秒。
请注意,我使用的是python3.5.2
2条答案
按热度按时间s71maibg1#
我发现了我的错误。
cd
不适用于子流程,但子流程提供了cwd命名参数,该参数接受运行参数所需的路径。它如此快速地返回completedprocess的原因是它成功地更改了目录,然后退出了子进程。对不起,我没有想到cd是罪魁祸首,直到我遇到这个问题,这也回答了我的问题。
iszxjhcz2#
你的错误比你想象的更根本。你的代码运行
与
$0
设置为目录,$1
设置为pwd;
等;离你想要的太远了(只是cd
只需切换到您的主目录;然后shell退出,而不处理您传入的所有参数,python继续返回启动子进程之前的当前目录。)通常,传递一个字符串作为第一个参数
shell=True
,以及没有shell时的字符串列表。