python,os.popen 打包后出现问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python,os.popen 打包后出现问题相关的知识,希望对你有一定的参考价值。
Traceback (most recent call last):
File "1.py", line 348, in on_888
File "os.py", line 986, in popen
File "subprocess.py", line 667, in __init__
File "subprocess.py", line 908, in _get_handles
OSError: [WinError 6] 句柄无效。
os.popen(r'"cmd /c start /wait \\IP\t\p.exe"','w') 时报上面的错
os.popen(r'"cmd /c start /wait \\IP\t\p.exe"','w',1) 时报上面的错
os.popen(r'"cmd /c start /wait \\IP\t\p.exe"','r',1) 时报下面的错
os.popen(r'"cmd /c start /wait \\IP\t\p.exe"','r') 时报下面的错
File "os.py", line 980, in popen
File "subprocess.py", line 667, in __init__
File "subprocess.py", line 890, in _get_handles
OSError: [WinError 6] 句柄无效。
请问该如何解决
问题来自 OS.SYSTEM 安装软件时条用 shell有一个黑框,想去掉
网友说 os.popen可以解决,但是pyinstaller 打包后出现问题
pycharm测试正常
请大神帮忙解决 谢谢
你加上了w参数也就是把console设置成了flase;那么os.popen()或者subprocess.popen()执行的时候没有载体,你只有把console设置成true,也就是命令改为pyinstaller -F xxx.py,这样你的os.popen()可执行,也能获得返回值。 参考技术B os.popen('ipconfig') 命令返回的结果在调试时乱码了:
output1 = os.popen('ipconfig')
o1=output1.read()
我猜这里输出的内容要和控制台设置的编码一致,我查了一下我的控制台编码时gbk
output1 = os.popen('ipconfig')
o1=output1.read().decode('gbk')
这样就好了!
Python面试高频问题: os.system()和os.popen()的区别
os.system()和os.popen()概述
大家搞python与操作系统交互时,必须掌握的两个方法就是os.system()和os.popen(),也是在相关技术领域面试中必问的题目!本文就对这两个命令进行详细介绍,os.system()和os.popen()都可以执行shell命令,但是他们还是有一定的区别的。
话不多说,先拿实例说事儿!
目录/opt/scripts/test 中包括文件:ClassDemo2.groovy ClassDemo.groovy Demo3.groovy pyscript.py
我们执行os.system命令:
>>> os.system('cd /opt/scripts/test;ls')
ClassDemo2.groovy ClassDemo.groovy Demo3.groovy pyscript.py
0
这里的0表示执行成功
接下来再看os.popen命令:
>>> os.popen('cd /opt/scripts/test;ls')
<open file 'cd /opt/scripts/test;ls', mode 'r' at 0x7fa7dd7d1660>
如果想看到具体的值,可以这样使用
>>> f=os.popen('cd /opt/scripts/test;ls')
>>> print(f.readlines())
['ClassDemo2.groovy\\n', 'ClassDemo.groovy\\n', 'Demo3.groovy\\n', ,'pyscript.py\\n']
注意如果连续执行多条语句可以使用“;”分割,实例中的cd /opt/scripts/test;ls 就是相关应用。
具体细节如下:
1. 命令被分号“;”分隔,这些命令会顺序执行下去;
2. 命令被“&&”分隔,这些命令会顺序执行下去,遇到执行错误的命令停止;
3. 命令被双竖线“||”分隔,这些命令会顺序执行下去,遇到执行成功的命令停止,后面的所有命令都将不会执行;
os.system细节
os.system方法是os模块最基础的方法,其它的方法一般在该方法基础上封装完成。返回的是退出状态码。os的system原理是每一条system函数执行时,通过当前 Shell 启动的一个新的子进程或子 Shell 被称为 SubShell (子 Shell )。子 Shell 会自动继承父 Shell 的很多环境,如环境变量、工作目录、文件描述符等,但是反之,子 Shell 中的环境仅在子 Shell 中有效,父 Shell 无法读取子 Shell 的环境。例如,如果在父 shell 里定义全局变量,子 shell 中就可以调用该变量。但当在子 shell 中定义一个局部变量时,父 shell 是无法读取该变量的。
os.popen细节
os.popen() 方法用于从一个命令打开一个管道,返回的是命令的输出结果。从这个命令获取的值可以继续被使用。因为它返回一个文件对象,可以对这个文件对象进行相关的操作。
popen()方法语法格式:
os.popen(command[, mode[, bufsize]])
参数:
command -- 使用的命令
mode -- 模式权限可以是 'r'(默认) 或 'w'。
bufsize -- 指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位)。负的bufsize意味着使用系统的默认值,一般来说,对于终端设备,它是行缓冲;对于其它文件,它是全缓冲。如果没有改参数,使用系统的默认值。
返回值:
返回一个文件描述符号为fd(文件索引)的打开的文件对象
二者使用总结
如果要直接看到运行结果的话,应该使用os.system;如果需要获取返回值做进一步的处理则使用os.popen
以上是关于python,os.popen 打包后出现问题的主要内容,如果未能解决你的问题,请参考以下文章
Python面试高频问题: os.system()和os.popen()的区别
python win10系统下subprocess.Popen(os.popen)引发的系统拒绝问题
os.popen().readlines 的奇怪行为[重复]
python os.system、os.popen、subprocess.Popen的区别