吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1543|回复: 14
收起左侧

[求助] python 初学进程的疑问

[复制链接]
甜萝 发表于 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 效果如同截图那样

uTools_1662461401305.png

执行 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')) 这样会报错 截图如下



uTools_1662463291668.png

要改成这样 print(output.decode('gbk')) 才会正常输出 截图如下


uTools_1662463480960.png

我将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'))


期待各位大神的精彩回复 晚上回来之后会查看这个帖子并和各位讨论

uTools_1662461401305.png

免费评分

参与人数 2吾爱币 +3 热心值 +2 收起 理由
bingshuir + 1 + 1 谢谢@Thanks!
billsmiless + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Thinkx 发表于 2022-9-6 20:31
因为你用的是Windows,windows系统是用GBK编码的
原因可能是你那个文件不是 UTF8 编码的,或者文件路径中有中文
 楼主| 甜萝 发表于 2022-9-6 22:04
本帖最后由 paypojie 于 2022-9-6 22:05 编辑
Thinkx 发表于 2022-9-6 20:31
因为你用的是Windows,windows系统是用GBK编码的
原因可能是你那个文件不是 UTF8 编码的,或者文件路径中 ...

有回复了 激动
zhi_huo 发表于 2022-9-6 22:15
zhi_huo 发表于 2022-9-6 22:19
本帖最后由 zhi_huo 于 2022-9-6 22:21 编辑
https://blog.csdn.net/imzoer/article/details/8678029
Python中subprocess学习_imzoer的博客-CSDN博客_python subprocess
 楼主| 甜萝 发表于 2022-9-6 23:02
zhi_huo 发表于 2022-9-6 22:15
https://blog.csdn.net/wang7807564/article/details/78164855

明天再细看
 楼主| 甜萝 发表于 2022-9-6 23:03
billsmiless 发表于 2022-9-6 22:28
帖子写的比较用心,继续加油💪🏻

还好 谢谢
puajose 发表于 2022-9-7 00:02
这不就是win的原因吗
Mahone1 发表于 2022-9-7 00:34
Thinkx 发表于 2022-9-6 20:31
因为你用的是Windows,windows系统是用GBK编码的
原因可能是你那个文件不是 UTF8 编码的,或者文件路径中 ...

你这句话解决了我很久以来的一个疑问,我以前用命令行批量转移文件到文件夹有时候转移失败,现在看来应该是编码问题,但是仔细一想也不对啊
我是用everything获得所有文件名,然后在excel里批量构造命令行,然后转成bat文件运行,文件名也是win的文件名,按理来说不会有因为编码而导致的问题啊,疑惑
白水饮 发表于 2022-9-7 09:53
cmd默认GBK编码
Dingtalk_20220907095250.jpg
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 08:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表