python 初学进程的疑问
本帖最后由 paypojie 于 2022-9-6 19:41 编辑python 子进程 subprocess
源码如下 来自 https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064
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 表示正确执行 成功
不知道上面这段代码理解准不准确
下面还有一段代码我感到疑惑
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'))
期待各位大神的精彩回复 晚上回来之后会查看这个帖子并和各位讨论
因为你用的是Windows,windows系统是用GBK编码的
原因可能是你那个文件不是 UTF8 编码的,或者文件路径中有中文
本帖最后由 paypojie 于 2022-9-6 22:05 编辑
Thinkx 发表于 2022-9-6 20:31
因为你用的是Windows,windows系统是用GBK编码的
原因可能是你那个文件不是 UTF8 编码的,或者文件路径中 ...
有回复了 激动 {:301_972:}{:17_1050:} {:301_972:} https://blog.csdn.net/wang7807564/article/details/78164855 本帖最后由 zhi_huo 于 2022-9-6 22:21 编辑
https://blog.csdn.net/imzoer/article/details/8678029Python中subprocess学习_imzoer的博客-CSDN博客_python subprocess zhi_huo 发表于 2022-9-6 22:15
https://blog.csdn.net/wang7807564/article/details/78164855
明天再细看 billsmiless 发表于 2022-9-6 22:28
帖子写的比较用心,继续加油💪🏻
还好 谢谢 {:300_969:} 这不就是win的原因吗 Thinkx 发表于 2022-9-6 20:31
因为你用的是Windows,windows系统是用GBK编码的
原因可能是你那个文件不是 UTF8 编码的,或者文件路径中 ...
你这句话解决了我很久以来的一个疑问,我以前用命令行批量转移文件到文件夹有时候转移失败,现在看来应该是编码问题,但是仔细一想也不对啊
我是用everything获得所有文件名,然后在excel里批量构造命令行,然后转成bat文件运行,文件名也是win的文件名,按理来说不会有因为编码而导致的问题啊,疑惑 cmd默认GBK编码
页:
[1]
2