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

即使定义了stdout/stdin,子进程在一个文件pyinstaller之后也不工作

在这个问答内容中,问题涉及到子进程在使用pyinstaller打包后无法正常工作的情况。下面是一个完善且全面的答案:

问题描述: 当使用pyinstaller对Python脚本进行打包后,子进程无法正常工作,即使已经定义了stdout和stdin。

解决方案:

  1. 确保正确设置stdout和stdin: 在子进程中,可以使用sys.stdin和sys.stdout来获取标准输入和标准输出。在使用pyinstaller打包时,需要确保这些设置是正确的。可以尝试使用以下代码来设置stdout和stdin:
  2. 确保正确设置stdout和stdin: 在子进程中,可以使用sys.stdin和sys.stdout来获取标准输入和标准输出。在使用pyinstaller打包时,需要确保这些设置是正确的。可以尝试使用以下代码来设置stdout和stdin:
  3. 这段代码将标准输入和标准输出重定向到/dev/null,然后再将文件描述符复制回原来的stdin_fileno和stdout_fileno。
  4. 检查pyinstaller的打包选项: 在使用pyinstaller打包时,需要确保选择了正确的选项。可以尝试使用以下选项来打包脚本:
  5. 检查pyinstaller的打包选项: 在使用pyinstaller打包时,需要确保选择了正确的选项。可以尝试使用以下选项来打包脚本:
  6. 这些选项将生成一个单个的可执行文件,并且不会显示控制台窗口。
  7. 调试子进程: 如果子进程仍然无法正常工作,可以尝试使用调试工具来查看问题所在。可以使用Python的pdb模块进行调试,或者使用第三方调试器,如pydev或pycharm。
  8. 另外,还可以尝试在子进程中添加日志输出,以便更好地了解子进程的执行情况。

总结: 子进程在使用pyinstaller打包后无法正常工作的问题可能是由于stdout和stdin设置不正确或者打包选项不正确导致的。通过正确设置stdout和stdin,并选择合适的打包选项,可以解决这个问题。如果问题仍然存在,可以尝试使用调试工具进行调试,并添加日志输出来帮助定位问题。

腾讯云相关产品推荐: 腾讯云提供了丰富的云计算产品和服务,以下是一些相关产品的介绍和链接地址:

  1. 云服务器(CVM):提供弹性计算能力,支持多种操作系统和实例类型。链接:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版(CDB):提供高性能、可扩展的MySQL数据库服务。链接:https://cloud.tencent.com/product/cdb
  3. 云存储(COS):提供高可靠、低成本的对象存储服务,适用于图片、音视频、文档等各种数据的存储和管理。链接:https://cloud.tencent.com/product/cos
  4. 人工智能平台(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。链接:https://cloud.tencent.com/product/ai

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行评估和决策。

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

相关·内容

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

stdinstdout和stderr分别表示子程序的标准输入、标准输出和标准错误。 可选的值有PIPE或者一个有效的文件描述符(其实是个正整数)或者一个文件对象,还有None。...如果是PIPE,则表示需要创建一个新的管道,如果是 None,不会做任何重定向工作进程文件描述符会继承父进程的。...另外,stderr的值还可以是STDOUT,表示进程的标准错误输出到标准输出。 如果把preexec_fn设置为一个可调用的对象(比如函数),就会在进程被执行前被调用。...(仅限unix/linux) 如果把close_fds设置成True,unix/linux下会在开进程前把除了0、1、2以外的文件描述符都先关闭。 Windows下不会继承其他文件描述符。...注意,即使你只env里定义一个环境变量的值,会阻止子程序得到其他的父进程的环境变量(也就是说,如果env里只有1项,那么子进程的环境变量就 只有1个)。

3.5K30

python 生成exe文件

大家好,又见面,我是你们的朋友全栈君。 windows下,可以使用pyinstaller打包python程序为exe可执行程序。...1、安装pyinstaller cmd命令行窗口运行以下命令安装pyinstaller pip install pyinstaller 2、打包python程序 python程序所在目录,执行以下命令...# 切换到指定目录 cd /d path # 正常打包命令 pyinstaller -F -w -i ico_path xxx.py -F 是将所有文件打成一个exe文件,一般是必写的(注意必须是大写...) -w 是程序运行时不显示cmd界面 -i 修改生成的exe文件图标,可以写(-i 写的话 ico_path别写) ico_path 是生成的exe文件图标位置 py_path 是目标py文件位置...改为安装pyinstaller 5.2、exe点开之后就出现failed to execute script xxx 存在中文路径 使用pyinstaller时使用了-w命令与print冲突 5.3、反复运行本身

1.7K10

Python 守护进程

守护进程:通常被定义一个后台进程,而且它不属于任何一个终端会话(terminal session)。许多系统服务由守护程序实施;如网络服务,打印等。 ...调用‘chdir("/")’确认我们的进程不保持任何目录于使用状态。不做这个会导     致系统管理员不能卸装(umount)一个文件系统,因为它是我们的当前工作目录。    ...个遍,最后的结论是这样:   父进程执行代码到os.fork()处时,会将自己整个拷贝一份(即进程)这时候父进程os.fork()的返回值大于零(即进程的PID),进程os.fork()...的返回值等于零,父进程结束,进程继续执行,这时候又遇到第二个os.fork(),如上次一样,原来的进程变成了父进程,又产生新的进程之后进程就结束。...进程就变成了一个无终端,无会话的完全自我掌控的后台进程

90630

python模块之subprocess类与常量

stdin, stdout, stderr参数的特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数的特殊值,表示重定向标准错误到标准输出 Popen 一个新的进程中执行子程序...如果是序列,则args中的第一个元素是要执行的程序;如果是字符串,解释执行与平台有关,POSIX系统args将被解释为要执行的程序的名称或路径(前提是传递任何参数给程序)。...进程文件句柄继承自父进程。除此之外,stderr还可以是STDOUT,表示标准错误输出重定向到标准输出。 preexec_fn:限于POSIX系统,设置一个可调用对象,先于进程中的程序执行。...如果为True,POSIX系统下,进程执行前关闭除0,1,2外的文件描述符。 pass_fds:限于POSIX,可选的文件描述符序列,用于父子进程间保持开放。...只要提供此参数,close_fds强制设为True。 cwd:进程执行前改变工作目录为cwd,可以是字符串或path-like对象。

2.4K10

深入理解Node.js的进程进程

捕获错误信息,并且进程以0退出。开发者可以 uncaughtException 事件中,清除一些已经分配的资源(文件描述符、句柄等),推荐在其中重启进程。...调用 'exit' 事件监听器之后,Node.js 进程将立即退出,从而导致事件循环中仍排队的任何其他工作被放弃。process 的标准流对象process 提供 3 个标准流。...因为 nodejs 并不适合计算密集型的应用,一个进程一个线程,在当下时间点上,就一个事件执行。那么,如果我们的事件占用了很多 cpu 时间,那么之后的事件就要等待非常久。...默认情况下,进程stdinstdout 和 stderr 会被重定向到 ChildProcess 对象上相应的 subprocess.stdin、subprocess.stdout 和 subprocess.stderr..."pipe", // 把子进程stdout 通过管道传到父进程 。 fs.openSync("err.out", "w") // 把子进程的 stderr 定向到一个文件

1.9K21

python中的subprocess

此外,标准错误可以用STDOUT定义,表明应用程序应该从STDOUT捕获到相同的文件句柄的标准错误数据。 如果preexec_fn设置为一个可调用对象,该对象将在进程执行之前调用。...如果 cwd 不为None,进程将在执行前切换到 cwd指定的目录 如果 env 不为空,为新进程定义环境变量 如果 universal_newlines 为 True, 则文件对象标准输出、标准错误输出以文本文件形式打开...) 这个模块定义一些简短的函数: call(*popenargs, **kwargs):     运行带参数的命令.  ...这个属性是提供输入到进程一个文件对象,否则为None stdout     如果stdout参数是PIPE , 这个属性是提供输出到进程一个文件对象,否则为None stderr      如果stderr...参数是PIPE , 这个属性是提供错误输出到进程一个文件对象,否则为None pid     进程的PID returncode     进程的返回码。

1.6K30

Python守护进程daemon实现

守护进程脱离于终端是为了避免进程执行过程中的信息在任何终端上显示并且进程不会被任何终端所产生的终端信息所打断。...这是为了保证守护进程的当前工作目录在一个挂载的文件系统中,该文件系统不能被卸载。 5、关闭不再需要的文件描述符。根据具体情况来定。...os.setsid() '''防止类似于临时挂载的文件系统下运行,例如/mnt文件夹下,这样守护进程一旦运行,临时挂载的文件系统就无法卸载,这里我们推荐把当前工作目录切换到根目录下''' os.chdir...null','/tmp/daemon.log','/tmp/daemon.err') # 调用之后,你的程序已经成为了一个守护进程,可以执行自己的程序入口 time.sleep(10)...可以改变到对于守护程序运行重要的文件所在目录 os.umask(0) #调用umask(0)以便拥有对于写的任何东西的完全控制,因为有时不知道继承什么样的umask。

7.1K30

使用python执行shell脚本 并动态传参 及subprocess的使用详解

最近工作需求中 有遇到这个情况 web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择subprocess这个python标准库 subprocess...这个模块可以非常方便的启动一个进程,并且控制其输入和输出 Class Popen(args,bufsize = 0,executable=None, stdin =None,stdout =None...stdinstdout和stderr分别指定执行的程序的标准输入,标准输出和标准错误文件句柄。有效值是PIPE,现有文件描述符(正整数),现有文件对象和 None。...如果cwd不是None,那么执行子代之前,当前目录将更改为cwd。 如果env不是None,它将为新进程定义环境变量。...可选的stdin参数应该是要发送到进程的字符串,如果没有数据应发送给进程,则为None。

5.2K30

Python Subprocess库详解

简介 Subprocess库是Python中用于创建和管理进程的标准库。它提供一个强大而灵活的接口,使得你可以Python中启动新的进程、连接它们的输入和输出,并与它们进行交互。...=True) print(result.stdout) 在这个例子中,我们定义一个定义环境变量CUSTOM_VARIABLE,并将其传递给进程。...) print(result.stdout) 在这个例子中,input_data通过stdin参数传递给进程,实现输入的传递。...使用subprocess.Popen的shell参数 subprocess.Popen类提供shell参数,允许你启动进程时使用Shell解释器执行命令。...() print(output) 在这个例子中,stdin参数被设置为一个打开的文件对象,从文件中读取输入并传递给进程

1K21

【愚公系列】2021年12月 Python教学课程 26-系统编程

os.popen(command, [mode, [bufsize]]) 开启一个进程执行 command 参数指定的命令,进程进程之间建立一个管道 pipe,用于父子进程间通信。...该方法返回一个文件对象,可以对这个文件对象进行读或写,取决于参数 mode,如果 mode 指定只读,那么只能对文件对象进行读,如果 mode 参数指定只写,那么只能对文件对象进行写操作。...必须是一个字符串,字符串参数列表 stdinstdout 和 stderr:进程的标准输入、输出和错误。...其值可以是subprocess.PIPE、subprocess.DEVNULL、一个已经存在的文件描述符、已经打开的文件对象或者 None。subprocess.PIPE 表示为进程创建新的管道。...stdout 获取进程stdout。通常为 bytes 类型序列,None 表示没有捕获值。

85520

书中关于伪终端的一个纰漏

当 slowout 结束时,进程读伪终端主设备时返回 0,它知道工作进程结束后,即将结束自己的工作, 但是父进程一直卡在读终端输入上,并不知道工作进程已经退出,于是 pty 进程向父进程发送一个...SIGTERM,导致进程没有继续读 slowout 的输出就结束。...所以他为 pty 程序加了一个 -i 选项,如果该选项生效, 就在父进程stdin 失败后,不再向进程发送 SIGTERM 信号,从而允许 pty 进程读 slowout 的输出直到 slowout...指的是 pty 进程不是 slowout。...其实所有的重定向操作 pty 程序运行起来时就已经完成了,根本无法传递到 slowout 的参数上(即使传递到了生效,因为没有 shell 做解析)。

41820

Supervisor这个监控告警功能你用过吗?

它是通过fork/exec的方式把这些被管理的进程当作supervisor的进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。...实现当进程挂掉的时候,父进程可以准确获取进程挂掉的信息的,可以选择是否自己启动和报警。...即使没有配置 listener,这些 event 也是会发的;如果配置 listener 并监听该类型的 event,那么这个 listener 就会接收到该 event。...关于Supervisor [eventlistener:x] 配置中允许的键方面,几乎与supervisor [program:x]完全一样,只是Supervisor遵循事件侦听器进程的“捕获模式”...PROCESS_STATE_EXITED是一个supervisor的监控项对应的进程意外退出时会触发的事件,这就使得一个进程出现意外退出的情况下会通知到crashmail。

1.3K20

win上实现linux上watch功能,基于pyqt5windows下实时刷新nvidia-smi,可套用其他类似命令!

linux中我们可以使用watch和nvidia-smi来不停刷新GPU信息,但是windows上没有watch,只能通过nvidia-smi -l 1来实现最快一秒一刷新,但是显示的效果是一闪一闪的...我于是有用pyqt来呈现结果的想法,并且可以支持毫秒级别的刷新效果图图片代码总览开源地址:Githubimport timeimport subprocessimport threadingimport...,这里以nvidi-smi为例 ps = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True...self.th = threading.Thread(target=self.refresh_info, args=()) self.th.start() # 关闭时结束刷新进程...安装pyqt: pip install pyqt5安装pyinstaller: pip install pyinstaller除nvidia-smi之外,其他命令套用即可。

1.7K41

Python,Shell 和 三个标准文件

第二种场景:ping zhihu.com 它会持续的输出结果,并不会退出(当然可以加 -t n 来指定 n 次之后结束退出,这样就属于场景一,本文我们指定 n) 相信这两种情况已满足读者 90%...呃 100% 需求,如果没有请留言区留言 ---- 预备 执行一个 Shell 命令行时通常会自动打开三个标准文件,即: 标准输入文件stdin),通常对应终端的键盘 标准输出文件stdout)...从 stdout 和 stderr 文件中读取数据,直到达到文件结尾。等待进程终止。可选的 input 参数应该是要发送到进程的字符串,如果没有数据应该发送给进程,则为 None。...communicate() 返回一个元组 (stdout, stderr)。 例子中我们并没有显式的指定 input 参数,默认为 None,我们只从 stdin 和 stderr 文件中读取数据。...这里其实是一个同步的过程,进程终止后才会返回所读取到的数据(进程终止,文件自然结尾),也就是 communicate() 方法直接使命令执行变为了同步,执行完成就一直阻塞。

1.4K60

Python subprocess与命令行交互

虽然可以使用 subprocess.run一个线程中启动一个进程,并在另一个线程中与其交互。 但是,当完成了进程之后,要完全终止它将变得非常棘手。...Linux 进程通常在交互模式下进行行缓冲,否则进行全缓冲。 很少有进程是完全不缓冲的。 因此,在看来,建议小于一行的块中读取 stdout。 真的,千万别这么做。...线程会轮询标准输出属性,只要有新行可用,就会循环并立即打印它们。 如果运行这个示例,您将注意到进程stdout 是实时报告的,而不是最后报告一个错误。...交互的最后,关闭进程stdin (这是可选的,但对于某些类型的进程很有用) ,调用 terminate,然后等待。...注意,可以在这里使用communicate,而不是等待来捕获 stderr 输出。 使用非阻塞读线程和可阻塞线程进行交互 最后的示例演示一个稍微更高级的场景。

7.3K22

Python实现守护进程

概念 守护进程(Daemon)称为精灵进程是一种生存期较长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,系统关闭时终止。...大致流程如下: 后台运行 首次fork,创建父-进程,使父进程退出 脱离控制终端,登录会话和进程组 通过setsid使进程成为process group leader、session leader...禁止进程重新打开控制终端 二次fork,创建-孙进程,使sid不等pid 关闭打开的文件描述符 通常就关闭STDINSTDOUT和STDERR 改变当前工作目录 防止占用别的路径的...打开一个控制终端的条件是该进程必须是session leader。...第一次fork,setsid之后进程成为session leader,进程可以打开终端;第二次fork产生的进程,不再是session leader,进程则无法打开终端。

1.2K20

python实现局域网ip地址扫描

subprocess模块中只定义一个类: Popen。可以使用Popen来创建进程,并与进程进行复杂的交互。...他们可以是PIPE(数据管道),文件描述符或文件对象,可以设置为None,表示从父进程继承。如果参数shell设为true,程序将通过shell来执行。...subprocess.PIPE   创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数。表示与进程通信的标准流。...Popen.communicate(input=None)   与进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到进程的参数。...注意:如果希望通过进程stdin向其发送数据,创建Popen对象的时候,参数stdin必须被设置为PIPE。

3K10
领券