好友
阅读权限30
听众
最后登录1970-1-1
|
甜萝
发表于 2022-9-6 19:33
本帖最后由 paypojie 于 2022-9-6 19:41 编辑
python 子进程 subprocess
源码如下 来自 https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064
[Python] 纯文本查看 复制代码 import subprocess
print('$ nslookup www.python.org')
r = subprocess.call(['nslookup', 'www.python.org'])
print('Exit code:', r) 理解如下:
因为要创建新进程 所以导入 subprocess模块
输出一段文本 '$ nslookup www.python.org'
subprocess.call 表示创建(启动)一个子进程 在子进程里进入cmd执行命令 nslookup www.python.org 效果如同截图那样
执行 subprocess.call() 方法会返回状态码 如果返回0 表示正确执行 成功
不知道上面这段代码理解准不准确
下面还有一段代码我感到疑惑
[Python] 纯文本查看 复制代码 import subprocess
print('$ nslookup')
p = subprocess.Popen('nslookup',stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output,err = p.communicate(b'set q=mx\npython.org\nexit\n')
print(output.decode('utf-8'))
print('errcode' , p.returncode) 第一行 第二行 太简单 就不解释了
第三行 p = subprocess.Popen(['nslookup'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
因为要创建子进程 所以 使用sub.popen()方法来启动一个子进程 在子进程里打开cmd程序 输入并且执行命令 'nslookup' 然后创建三个管道 分别是标准输入 输出 错误 管道
---------------不知道是不是这样理解的
p保存了返回后状态码 通过调用 returncode 方法来实现查看 返回0 表示 执行成功 没有出现问题 非0则表示有问题
最后一行 print('Exit code:', p.returncode) 把我上面的想法给实现并且打印
第四行 p.communicate() 表示和子进程进行交互 发送和输出数据
不过 output, err = p.communicate(b'set q=mx\npython.org\nexit\n') 我不知道 err保存了些什么
output 是保存了一个bytes类型数据
倒数第二行 print(output.decode('utf-8')) 这样会报错 截图如下
要改成这样 print(output.decode('gbk')) 才会正常输出 截图如下
我将utf-8改为gbk才会正常输出 不明白为什么
最后一行 print('Exit code:', p.returncode)
p.returncode 表示查看子进程执行完成的状态 如果返回1 表示执行成功
不理解的代码行如下
output,err = p.communicate(b'set q=mx\npython.org\nexit\n')
print(output.decode('gbk'))
期待各位大神的精彩回复 晚上回来之后会查看这个帖子并和各位讨论
|
-
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|