【发布时间】:2022-01-23 13:13:32
【问题描述】:
我试图用 Python3 编写一个自动化任务并使用subprocess.call,因为我需要运行一些 shell 命令作为脚本的一部分,但发现其中一个输出没有按我预期的正确顺序打印。
部分:
在 Python2 上:
[root@server101 ~]# cat check_kernel.py
#!/usr/bin/env python
import subprocess
print "Current running kernel version on the system is:\n", subprocess.call(["uname", "-r"])
输出:
[root@server101 ~]# ./check_kernel.py
Current running kernel version on the system is:
3.10.0-1160.45.1.el7.x86_64
0
在 Python3 上:
[root@server101 ~]# cat check_kernel.py
#!/usr/bin/env python3
import subprocess
print ("Current running kernel version on the system is:\n", subprocess.call(["uname", "-r"]))
输出:
[root@server101 ~]# ./check_kernel.py
3.10.0-1160.45.1.el7.x86_64
Current running kernel version on the system is:
0
那么在使用 Python3 时,subprocess.call 的真正区别是什么?
我是否遗漏了什么或者我不应该在 Python3 中使用 subprocess.call 并将其更改为 subprocess.run 或 subprocess.Popen 是让子进程与 Python3 一起使用的唯一方法?。
【问题讨论】:
-
这能回答你的问题吗? Retrieving the output of subprocess.call()
-
发生的情况是首先子进程运行,它自己打印输出,然后返回
0,然后print才能执行,你得到你自己的字符串+0 -
亚当,在说它是重复的帖子之前,你是说在 Python3 上 subprocess.call 行为总是这样吗?如果你用 python2 检查相同的代码,它工作正常。只是想知道有什么区别。
-
不,在 Python 2 中也是如此。
call()返回子进程的退出代码 docs.python.org/2.7/library/subprocess.html#subprocess.call -
你能用
#!/usr/bin/env python运行同一个吗?你可以看到它打印出所需的输出。
标签: python-3.x linux subprocess