处理退出状态 popen python

2023-12-12

我试图用 popen 处理状态退出,但它给出了一个错误,代码是:

import os
try:
    res = os.popen("ping -c 4 www.google.com")
except IOError:
    print "ISPerror: popen"
try:
    #wait = [0,0]
    wait = os.wait()
except IOError:
    print "ISPerror:os.wait"

if wait[1] != 0:
    print("  os.wait:exit status != 0\n")
else:
    print ("os.wait:"+str(wait))
print("before read")
result = res.read()

print ("after read:")

print ("exiting")

但如果给出以下错误:

文件对象析构函数中关闭失败: IOError: [Errno 10] 没有子进程


错误说明

看起来发生此错误是因为退出时,程序试图销毁res,其中涉及调用res.close()方法。但不知何故调用os.wait()已经关闭了该对象。所以它正在尝试关闭res两次,导致错误。如果致电os.wait()删除后,该错误不再发生。

import os
try:
    res = os.popen("ping -c 4 www.google.com")
except IOError:
    print "ISPerror: popen"

print("before read")
result = res.read()
res.close() # explicitly close the object
print ("after read: {}".format(result)

print ("exiting")

但这给您带来了知道该过程何时完成的问题。自从res只是有类型file,你的选择是有限的。我会改为使用subprocess.Popen

使用 subprocess.Popen

To use subprocess.Popen,您将命令作为list字符串。有能力去访问进程的输出,您设置stdout论证subprocess.PIPE,它允许您访问stdout稍后使用文件操作。然后,不使用常规的os.wait()方法,subprocess.Popen物体有自己的wait直接在对象上调用的方法,这也是设置returncode代表退出状态的值。

import os
import subprocess

# list of strings representing the command
args = ['ping', '-c', '4', 'www.google.com']

try:
    # stdout = subprocess.PIPE lets you redirect the output
    res = subprocess.Popen(args, stdout=subprocess.PIPE)
except OSError:
    print "error: popen"
    exit(-1) # if the subprocess call failed, there's not much point in continuing

res.wait() # wait for process to finish; this also sets the returncode variable inside 'res'
if res.returncode != 0:
    print("  os.wait:exit status != 0\n")
else:
    print ("os.wait:({},{})".format(res.pid, res.returncode)

# access the output from stdout
result = res.stdout.read()
print ("after read: {}".format(result))

print ("exiting")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理退出状态 popen python 的相关文章

随机推荐

  • 我想向 pandas 数据框添加新索引

    我正在尝试向 pandas 数据框添加新索引 数据框如下所示 date price neg vol pos vol 0 2017 10 17 01 00 00 51 88 11 4 1 2017 10 17 01 00 00 51 89 1
  • 使用 tablesorter 对多个表进行排序

    我正在使用 jQuery tablesorter 插件来允许用户对我们网站上的数据表进行排序 我最近遇到一个区域 其中使用表排序器的多个表将显示在同一页面上 我对此没有遇到任何问题 并且表排序器插件工作得很好 一些用户要求我们能够同时对所有
  • SQLite Android 应用程序登录

    我目前正在开发一款游戏 我想要的只是我的登录屏幕能够检查我已经存储在数据库中的用户名和密码是否正确 以及何时正确并且单击登录按钮打开一项新活动 我已经构建了数据库 并且还建立了登录名 我只需要弄清楚如何检查我的数据库而不仅仅是字段中的文本
  • MySQL-Win10升级后Wamp服务器无法工作

    我刚刚升级到 Windows 10 升级后我的 MySQl 未启动 wamp 服务器图标橙色 我可以看到 Apache 服务器正在运行 但 MySQL 未运行 请帮忙 Thanks 解决了 这对我有用 我去了 wamp bin mysql
  • 将字符串中读取的输入列表转换为Python中的列表

    我正在阅读一个包含列表的文件 下面是输入文件 1 2 3 4 42 1 1 2 3 5 8 现在 如您所见 有一些列表被读取为字符串字符 我正在尝试将其转换为实际列表 下面是我正在使用的代码 list list sys stdin read
  • 通过 localstack 中的 SES 发送电子邮件,事件目的地带有 sns 主题,不起作用

    当在 localstack 中使用 SES 触发电子邮件时 我试图在队列中接收消息 SES 服务正在使用连接到 SNS 主题的事件目标 SNS主题连接到一个队列 我想在其中接收跳出 点击信息 步骤如下 1 whitelist email s
  • Quartz 2.2 多调度器和@DisallowConcurrentExecution

    请考虑这个例子 示例 Web 应用程序调用scheduler start 在其启动时 调度程序配置为将其作业存储在数据库中 该应用程序被复制到六个网络服务器上 因此 如果我们启动六个 Web 服务器 我们将在单个数据库上拥有六个具有相同名称
  • JavaScript - 比较两个多维数组

    我有两个多维数组 首先是类似的东西 one one three four five five one one one 第二个是这样的 one one nine one one one two two two two two 现在 我想要的是
  • 将现有资源导入 Terraform 状态文件时出错

    我正在尝试重构我的一些模块 这需要我将现有资源移动到不同的状态文件中 通常导入资源是单调但简单的 我不知道如何解释以下内容 路径段的数量不能被2整除 尝试导入任何这些资源时出错 我尝试导入的所有资源都会发生这种情况 我过去已经成功完成过多次
  • IE8 - 如何在内容加载后运行 jquery 代码?

    我遇到一种情况 我加载一个父网页 恰好是 Java JSP 其中包含我正在文档就绪函数内部使用 ajax 异步 加载的内容 期望页面能够快速呈现任何内容 然后运行 jquery 代码页面显示后执行异步工作 它的工作方式与 Firefox 中
  • SQL 多个参数值

    SQL 2005 中有哪些选项可用于将多个值传递给存储过程 伪代码 在 C 代码中 List
  • 相机使用自定义相机预览渲染器不清楚

    我使用以下链接使用自定义渲染器显示相机预览https developer xamarin com guides xamarin forms application fundamentals custom renderer view I wa
  • 如何限制图片上传大小小于2mb?

    我有一个 htmlselect上传图像的选项 div class row smallMargin div class col sm 6 Attach Image div div class col sm 6 div div
  • 如何从hibernate+spring应用程序将csv文件导入mysql?

    我想将 csv 文件导入到 mysql 表中 我进行导入的原因是因为我有很多大文件 这些文件会在短时间内发送到我的服务器 尝试使用 java 逐行添加 但遇到了一堆不同的错误 例如休眠异常或 java 挂起 如果文件是 太大 导入速度非常快
  • ForEach - 打印项目和数值[重复]

    这个问题在这里已经有答案了 如何实现显示每个数组成员以及取决于列表计数的数值的 ForEach 结果 该数值会针对每个项目递增 例子是 1 火鸡 2 火腿 3 梅奥 struct EditorDirections View State pr
  • 4 列 CSS 布局 - 流体

    我正在绕圈子试图解决这个问题 HTML CSS div div class inner box clearfix div div div div
  • 获取点击的图片框数组的索引

    我正在动态创建一些图片框并单击图片框的事件 如下所示 Image myImage Image FromFile image Untitled6 png PictureBox txtTeamNames new PictureBox 5 for
  • 用于下载文档的 Alfresco REST API

    我想使用 Afresco REST API 下载文档 经过一番研究 我发现了这个 REST API alfresco s api node content property store type store id id 但我不知道如何传递参
  • 如何从servlet调用JavaScript函数

    我是网络开发新手 我有一个外部 JavaScript 文件 其中包含一个要显示的函数 包含错误详细信息的提示 我需要将错误消息传递给函数 我已经在servlet中编写了控制器 如何从我的 servlet 调用该 JavaScript 文件的
  • 处理退出状态 popen python

    我试图用 popen 处理状态退出 但它给出了一个错误 代码是 import os try res os popen ping c 4 www google com except IOError print ISPerror popen t