首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Popen在没有控制台的情况下在pythonw中运行进程

在没有控制台的情况下在 Pythonw 中运行进程,可以使用 subprocess 模块中的 Popen 类。Popen 类可以用来创建一个新的进程,并返回一个进程对象,该对象可以用来与新创建的进程进行交互。

以下是一个使用 Popen 类在 Pythonw 中运行进程的示例代码:

代码语言:python
代码运行次数:0
复制
import subprocess

# 创建一个新的进程
process = subprocess.Popen(['python', 'script.py'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 等待进程执行完毕
process.wait()

# 获取进程的输出和错误信息
output, error = process.communicate()

# 打印输出和错误信息
print('Output:', output.decode('utf-8'))
print('Error:', error.decode('utf-8'))

在上面的代码中,我们使用 subprocess.Popen 创建了一个新的进程,并将其输出和错误信息通过管道传递给当前进程。然后,我们使用 process.wait() 等待进程执行完毕,并使用 process.communicate() 获取进程的输出和错误信息。最后,我们将输出和错误信息打印到控制台上。

需要注意的是,由于 Pythonw 不支持控制台,因此我们需要将 Popen 类的 stdoutstderr 参数设置为 subprocess.PIPE,以便将输出和错误信息通过管道传递给当前进程。同时,我们需要使用 decode('utf-8') 方法将输出和错误信息从字节串转换为字符串。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

pyinstaller打包成无控制台程序时运行出错(与popen冲突解决方法)

有时候我们需要在程序里执行一些cmd命令,使用os或者其它模块popen方法去执行 这个问题一般是程序内有输入导致,这个输入可以是input(),也可以是其它一些stdin操作(如os.popen...有一天,我把使用了os.popen方法python程序用pyinstaller打包成exe(用了无控制台打包参数-w) 双击运行时程序却弹框报错! ?...我就有点纳闷:为什么有控制台打包出来exe(不使用-w参数)可以运行使用-w参数(无控制台)打包却不能运行呢?...重点就在输入(stdin)这里: 当我们使用pyinstaller-w 参数(或Console=False)打包exe时,python解释器是不带控制台, 所以它没有办法处理输入(stdin) !...注意,即使你只env里定义了某一个环境变量值,也会阻止子程序得到其他进程环境变量(也就是说,如果env里只有1项,那么子进程环境变量就 只有1个了)。

3.8K30

Pytest系列(30)- 使用 pytest-xdist 分布式插件,如何保证 scope=session fixture 进程运行情况下仍然能只运行一次

,这意味着不同测试过程,要求高级范围 fixture(如:session)将会被多次执行,这超出了预期,某些情况下可能是不希望 尽管 pytest-xdist 没有内置支持来确保 scope...fixture 需要确保只运行一次的话,可以用上面的方法,直接套用,然后改需要改部分即可(这个后面详细讲解) 官方原话:这项技术可能并非在每种情况下都适用,但对于许多情况下,它应该是一个起点,在这种情况下...scope=session fixture 很明显执行了三次,三个进程三个测试用例得到数据不一样,明显不会是我们想要结果 使用官方解决方法栗子rt #!...可以将数据保存在环境变量 os.environ 两个进程跑三个测试用例文件 还是上面栗子代码 运行命令 pytest -n 2 --alluredir=tmp 运行结果 ?...可以看到 test_3 测试用例就没有读缓存文件了,每个进程只会读一次缓存文件,记住哦!

1.6K20
  • pyinstaller打包找不到文件问题解决

    1、将python程序打包成单文件(使用 -F 参数)后,尝试运行外部文件却提示找不到问题 当你将python程序打包成单文件(使用 -F 参数)后,运行程序,它实际上是先将exe内资源文件解压到临时文件夹...,然后再运行,所以会导致这种问题 比如,当你程序里面调用一个外部exe时,但却提示找不到该exe文件。...: C:\…\temp\asdqwezxc\ 第二句打印是这样: C:\…\temp\asdqwezxc\test\gg.exe 所以当我们调用已打包外部文件时,应该先使用os.chdir()...4、无控制台打包(使用-w参数),运行时弹框提示Failed to execute script问题 请看我这篇文章:pyinstaller打包成无控制台程序时运行出错,与popen冲突解决方法...这个问题一般是程序内有输入导致,这个输入可以是input(),也可以是其它一些stdin操作(如os.popen实际上会造成输入请求) 本质上就是:使用-w参数(无控制台)打包时程序里不要请求输入

    9.6K40

    Appium之常用python+adb指令集合

    在编写脚本过程,特别是使用python脚本操作Android设备时,常常需要去调用adb指令来辅助测试,下面就列举下在做自动化测试时经常使用adb指令 1、查看包名和activity adb shell...#操作设备power键 3、重启设备操作 os.popen("adb reboot") #直接(热)重启 4、打开指定应用(package/.activity) os.popen("adb shell...input keyevent 3") #切换至后台 6、查看系统内存情况 os.popen("adb shell dumpsys meminfo") 7、获取wifi信息 os.popen("...adb shell dumpsys wifi ") 8、查看进程占用CPU情况 os.popen(" top -m 20 -d 2 ") #top -m 进程数 -d 秒 9、查看设备电量信息...os.popen(" dumpsys battery ") 10、截图操作 os.popen(" adb shell screencap -p /sdcard/screen.png ") 11、跑Monkey

    1.2K10

    利用python实现操控手机

    客户端开发计算机上运行。您可以通过发出 adb 命令来从命令行终端调用客户端。 守护进程 (adbd):设备上运行命令。守护进程每个设备上作为后台进程运行。...服务器:管理客户端和守护进程之间通信。服务器开发机器上作为后台进程运行。...,然后存放到任意地址后,再将这个platform-tools地址添加到环境变量,然后控制台窗口中输入adb,如果看到以下情况,就说明安装完成了。...但是如果说安排好固定流程,比如一些游戏刷金币的话,没有复杂操作,只有单一点击事件的话,用adb还是相当方便,只要写好循环,持续发送adb命令,就可以不断运行操作了。...python,要使用adb的话,只需要一个os库就可以 ?

    2K20

    小白也能掌握Python部署应用技术

    10定时任务运行报错:操作员或系统管理员拒绝了请求解决方法 解决办法:首先确保python解释器进程列表退出,打开控制面板->管理工具->本地安全策略,选择安全设置->本地策略->安全选项,右边列表中找到域控制器...,定时任务设置运行时间计划,而exe部署需要将定时运行代码写入脚本后打包。...当然,你也可以在编辑器运行程序,确保程序不会被关闭或者设置定时任务控制服务开启关闭。...生成文件放在同目录dist下。-F(注意大写)是所有库文件打包成一个exe,-w是不出控制台窗口。...这种方法不一定能成功,如果你exe不符合服务规范,可能会启动失败 第一种方法失败情况下,我们可以官网下载instsrv.exe 和 srvany.exe 两个小工具注册服务。

    1.6K20

    python 调用cmd,不显示cmd黑

    python 调用系统命令方式有很多 1.1   os.system(command)        一个子shell运行command命令,并返回command命令执行完毕后退出状态。...这实际上是使用C标准库函数system()实现。这个函数执行command命令时需要重新打开一个终端,并且无法保存command命令执行结果。...对command执行实际上是按照{command;} 2>&1方式,所以output包含控制台输出信息或者错误信息。output不包含尾部换行符。...使用subprocess模块可以创建新进程,可以与新建进程输入/输出/错误管道连通,并可以获得新建进程执行返回状态。...Popen类有Popen.stdin,Popen.stdout,Popen.stderr三个有用属性,可以实现与子进程通信。

    3.9K10

    Python Subprocess库详解

    超时处理 实际应用,我们可能希望设置子进程最长运行时间,以避免因子进程无法正常退出而导致父进程一直等待。...在这个例子,我们使用subprocess.STARTUPINFO()创建了一个STARTUPINFO对象,并通过设置dwFlags属性创建了一个新控制台窗口。...使用timeout参数处理超时 Subprocess库timeout参数是3.3版本引入新功能,它为我们提供了一种优雅地处理子进程运行超时方式。...使用subprocess.Popentimeout参数设置超时时间 subprocess.Popentimeout参数允许你设置子进程最长运行时间,以避免因子进程无法正常退出而导致父进程一直等待。...使用subprocess.Popenclose_fds参数关闭文件描述符 subprocess.Popenclose_fds参数允许你进程关闭不必要文件描述符。

    2.3K21

    Python自动重新加载模块详解(autoreload module)

    守护进程模式 使用python开发后台服务程序时候,每次修改代码之后都需要重启服务才能生效比较麻烦。...,可以看到使用守护进程模式可以简单实现模块自动重新加载功能。...使用守护进程模式,有一种情况比较麻烦:如果主进程由于其他原因退出了,那么子进程还在运行: promissing@ubuntu:~$ kill 11742 promissing@ubuntu:~$ ps...守护进程模式-退出问题 为了解决由于守护进程退出,而导致子进程没有退出问题,一种比较简单解决方法就是守护进程退出时候也把子进程结束: # autoreload.py ... import signal...等等,控制台运行工程总是能很好工作,如果是IDE呢?由于IDE输入输出是重定向处理,比如,Sublime中就没有办法获取到输出信息。 因此还需要进一步完善输出问题。

    2.8K20

    python执行DOS命令3种方法小

    使用Popen模块产生新process 现在大部分人都喜欢使用PopenPopen方法不会打印出cmdlinux上执行信息。的确,Popen非常强大,支持多种参数和模式。...使用前需要from subprocess import Popen, PIPE。但是Popen函数有一个缺陷,就是它是一个阻塞方法。如果运行cmd时产生内容非常多,函数非常容易阻塞住。...一般情况下我们通过args参数来设置所要运行程序。如果将参数shell设为 True,executable将指定程序使用shell。...Popen.pid  获取子进程进程ID。 Popen.returncode  获取进程返回值。如果进程没有结束,返回None。...使用commands.getstatusoutput方法 这个方法也不会打印出cmdlinux上执行信息。这个方法唯一优点是,它不是一个阻塞方法。即没有Popen函数阻塞问题。

    2.2K20

    pythonsubprocess

    程序通常执行序列或字符串第一项,但可以通过使用明确参数进行设置。 UNIX上,shell = False(默认):在这种情况下,Popen使用os.execvp()来执行程序进程。...如果参数是一个序列,第一项指定命令字符串,其他将被视为附加shell命令参数。 Windows:Popen类通过使用CreateProcess()执行这个子进程来对字符串操作。...注意: 如果没有找到执行程序,所有本节函数都有可能以静默状态失败;这个模块会抛出OSError异常 以下例子, 我们假设subprocess 模块是"from subprocess import...Unix系统, os.popen2, os.popen3 与 os.popen4 同样可以没有shell介入情况下直接传递给程序 以序列形式执行命令行 这种方法可以用下面的方法替换: (...Unix系统, popen2 也可以没有shell介入情况下直接传递给程序以序列形式执行命令行.

    1.6K30

    python之调用系统命令 原

    一、python执行cmd 目前我使用python执行cmd方式有三种 使用os.system("cmd") 该方法调用完shell脚本后,返回一个16位二进制数,低位为杀死所调用脚本信号号码...使用os.popen调用test.sh情况:python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本退出状态码,后者返回值是脚本执行过程输出内容...Popen.pid 获取子进程进程ID。 Popen.returncode 获取进程返回值。如果进程没有结束,返回None。...即没有Popen函数阻塞问题。使用前需要import commands。...不管参数是一个路径还是文件 os.system() 函数用来运行shell命令 3.os进程 os模块包装了不同操作系统通用接口,使用不同操作系统下,可以使用相同函数接口,返回相同结构结果

    2.2K40

    python调用linux执行命令

    Linux系统,Python可以使用subprocess模块调用操作系统命令,实现与Linux系统交互。...Linux系统,我们可以使用subprocess模块来执行任何系统命令,包括常见shell命令、系统管理命令、网络命令等等。...该函数第一个参数是一个字符串列表,表示要执行命令和参数。本例,我们分别执行了ls、pwd和ifconfig命令,并将它们输出打印到控制台上。...除了run()函数外,subprocess模块还提供了其他函数,例如Popen()函数和call()函数。Popen()函数可以启动一个新进程,并返回一个Popen对象,可以用来与进程进行交互。...call()函数和run()函数类似,也可以执行命令并返回结果,但它没有返回Popen对象。

    5K40

    为你 Python 程序写个启动工具箱

    为了方便他人使用,我们常把图形界面打包成 exe 文件。但是如果我们只是为了自己使用方便的话,我们有必要把程序打包成几十乃至上百兆 exe 文件吗?没有必要。我们只要能够快速启动图形界面就可以了。...start 后面的第一个字符串表示你pythonw.exe 文件所在位置,一般在你 Python 安装目录下面,和 python.exe 同一目录。...关键点一: 这个程序核心思想就是再开一个进程来执行 py 文件,但是此时程序路径为启动管理器路径。所以说,如果你要打开程序,比方说“PDF阅读器”,涉及到了文件路径,一定要使用绝对路径。...startDetched 方法可以进程之外新开一个进程。也就是说,如果我们打开或者关闭 “PDF阅读器” ,并不影响启动管理器运行。...数据库保存信息,就是关键点三提到 button 属性。

    1.4K20

    Python标准库06 子进程 (subprocess包)

    这里内容以Linux进程基础和Linux文本流为基础。subprocess包主要功能是执行外部命令和程序。比如说,我需要使用wget下载文件。我Python调用wget程序。...Python,我们通过标准库subprocess包来fork一个子进程,并运行一个外部程序(fork,exec见Linux进程基础)。...使用subprocess包函数创建子进程时候,要注意: 1) 创建子进程之后,父进程是否暂停,并等待子进程运行。 2) 函数返回什么 3) 当returncode不为0时,父进程如何处理。...shell=True允许我们运行这样一些命令。 Popen() 实际上,我们上面的三个函数都是基于Popen()封装(wrapper)。这些封装目的在于让我们容易使用进程。...www.google.com"]) print("parent process") 从运行结果中看到,父进程开启子进程之后并没有等待child完成,而是直接运行print。

    2.8K60

    耗时两天,优化失败

    于是,为了验证文章内容是否与本次遇到问题一致,本地写了一个简单测试用例,测试代码仅仅包含popen()函数,编译,然后使用starce ....问题解决 既然使用popen会存在fork()函数创建进程拷贝父进程资源情况,那么有没有其它实现方法,能够使得子进程不对父进程资源进行拷贝呢? 这就是vfork()函数!...vfork()父子进程是共享数据,也就是说使用vfork()产生进程不会复制父进程资源,而是与父进程共享同一份资源,所以子程序修改变量,父进程变量也会被修改。...赶紧看了下日志,没有输出错误日志,再通过redis命令查询该订单是否已经被加载: 一切正常,看来问题已经解决(至少目前来看) 结语 本次优化使用基于vfork()vpopen()函数来提到之前基于...最重要一个原因是使用fork()popen(),创建子进程时候会进行资源复制,即使使用写时复制技术,如果没有足够内存来复制父进程使用内存,fork也会失败。

    52220
    领券