Windows 7 64 位上的 Python 子进程 - 当 stdout=PIPE 时无输出

2024-01-20

对于有关 Python 子进程的另一个问题,我深表歉意,但我找不到这个问题的答案。

我在使用某些在 Windows 7 64 位上调用子进程的 Python 代码时遇到问题。当子进程的标准输出发送到管道时,不会产生任何输出。子进程似乎运行和终止没有问题,只是不产生任何输出。

编辑:相同的代码在 WinXP 32 位上可以正常工作,所以我更新了问题标题。

# (listing 1)
from subprocess import *
#cmdline= (a valid command line)
proc = Popen(cmdline,shell=True,stdout=PIPE,stderr=PIPE)
out, err = proc.communicate()
print( out )
print( err )

这给出了输出

out:

err:

但是,当子进程的输出未通过管道传输时,它会按预期生成输出:

# (listing 2)
proc = Popen(cmdline,shell=True)
proc.communicate()

这将向控制台提供预期的输出。

我确信可执行文件实际上正在将其输出写入标准输出。我有 C 源代码,我添加了以下行:

fprintf(stdout, "HELLO");

同样,在运行清单 2 时可以看到“HELLO”,但在运行清单 1 时却看不到。

我还尝试创建一个新的 C++ 可执行文件并从命令行调用它:

#include <iostream>

int main()
{
    std::cout << "HELLO" << std::endl;
}

同样的事情仍然发生 - 运行清单 2 时可以看到“HELLO”,但运行清单 1 时却看不到。

如果我将 cmdline 设置为“dir”,则清单 1 和清单 2 都会发生预期的情况 - 目录内容将打印到控制台。

我尝试过的其他东西:Python 3.3和Python 2.7(相同的结果); bufsize=0(相同的结果);检查 proc.returncode (它是 0,正如预期的那样);删除 stderr=PIPE (在这种情况下,清单 1 会按预期给出“err: None”)。

编辑 - 我还尝试了 = proc.stdout 而不是 communications() 方法,具有相同的结果。 Python 文档和其他问题表明,communicate() 方法是正确使用的方法。


这根本不是Python 的问题。我的防火墙设置对可执行文件进行了“沙箱”处理,这导致它们的输出被丢弃,而没有任何类型的警告或错误。

阻止他们执行会更有意义。我想我需要使用不同的防火墙软件。

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

Windows 7 64 位上的 Python 子进程 - 当 stdout=PIPE 时无输出 的相关文章

  • Numpy 中矩阵乘以另一个矩阵的每一行

    我有一个大小为 4x4 的齐次变换矩阵和一个大小为 nx3 的轨迹 该轨迹的每一行都是一个向量 我想将齐次变换矩阵乘以轨迹的每一行 下面是代码 append zero column at last trajectory np hstack
  • 倒计时:01:05

    如何在 Python 中创建一个看起来像 00 00 分钟和秒 的倒计时时钟 它独立成一行 每次减少一actual秒 则应将旧计时器替换为低一秒的新计时器 01 00变成00 59它实际上击中了00 00 这是我开始使用但想要改造的基本计时
  • Python 中的参数命名约定

    对于形式参数密切相关的函数 例如 def add two numbers n1 n2 return n1 n2 def multiply two numbers n1 n2 return n1 n2 如上所示 为两个函数中的参数指定相同的名
  • python数据结构(类似设置)在添加重复项时抛出异常

    我正在寻找一种在添加重复元素时会引发异常的数据结构 我发现的最接近的是collections Counter gt gt gt from collections import Counter as counter gt gt gt c co
  • 从可变长度字符串中解析值的最佳方法是什么?

    假设我有一个由可变长度的逗号分隔的整数字符串 分割字符串并用值更新变量 如果存在 的最佳方法是什么 目前 我有以下内容 a b c 10 10 1 default values mylist int x for x in input spl
  • 注册表碎片整理程序[重复]

    这个问题在这里已经有答案了 这是出于好奇 但我见过几个 其中一些非常流行 称为注册表碎片整理程序的软件 虽然我可以看到它们提供的好处 但我很好奇您到底是如何进行注册表碎片整理的 请注意 我并不是要求提供软件名称 只是询问其如何以编程方式完成
  • MAMP Python-MySQLdb 问题:调用 Python 文件后 libssl.1.0.0.dylib 的路径发生变化

    我正在尝试使用 python MySQLdb 访问 MAMP 服务器上的 MySQL 数据库 当我最初尝试使用 python sql 调用 Python 文件来访问 MAMP 上的数据库时 我得到了image not found关于错误li
  • 在 NLTK Python 的朴素贝叶斯分类器中使用文档长度

    我正在使用 Python 中的 NLTK 构建垃圾邮件过滤器 现在 我检查单词的出现情况并使用 NaiveBayesClassifier 其准确度为 0 98 垃圾邮件的 F 测量值为 0 92 非垃圾邮件的 F 测量值为 0 98 然而
  • 在包含缺失值的 Pandas 数据框列上使用 apply 和 lambda 函数

    这是这个问题的后续 如何根据 pandas 数据框中其他列中的子字符串创建新列 https stackoverflow com questions 70086559 how to create new column based on sub
  • 通过 PsExec 在远程计算机中执行批处理文件

    我正在尝试通过 PSExec 在远程 PC 上运行批处理文件 在批处理文件中我刚刚编写了 记事本 下面的 psexec 命令在我的笔记本电脑上运行 但无法在远程 PC 上执行任何操作 我什至没有看到 记事本 在远程计算机的进程列表上运行 c
  • 如何使用包含 \n 的 .txt 创建一维列表?

    我想读取一个文本文件并将文件的每个元素放入一个列表中 而不是为文件中的每一行都有一个单独的列表 例如 如果文件是 你好我的名字 Is Joe 我希望列表是 你好 我的名字是 Joe 而不是 你好 我的名字 是乔 这是我到目前为止所拥有的 d
  • 在Python中,如何将“datetime”对象转换为秒?

    我有一堆日期时间对象 我想计算每个对象自过去固定时间以来的秒数 例如自 1970 年 1 月 1 日以来 import datetime t datetime datetime 2009 10 21 0 0 这似乎只是区分具有不同日期的日期
  • 在Python中将字符串转换为变量? [复制]

    这个问题在这里已经有答案了 我对 python 和编程都很陌生 并且已经尝试弄清楚如何做到这一点有一段时间了 这是我需要帮助的内容 y 0 x 2 p01 hello p02 bye print p str y str x 输出当然是 p0
  • 虎鲸失踪

    使用plotly 导出静态图表时遇到小问题 Plotly 无法正确识别我已安装 orca 并且仍然存在与缺少 orca 相关的错误 我尝试更改 orca 目录 但它仍然无法正常工作 谁知道出了什么问题吗 My code import plo
  • 我可以在不同的计算机上使用相同的虚拟环境吗

    在我的办公室电脑上 我做了virtualenv one for rule them all在 Dropbox 文件夹中 我想在工作和家庭中使用这个环境 这可能吗 目前我还没有成功 考虑使用relocatablevirtualenv 的选项
  • AttributeError:模块“matplotlib”没有属性“font_manager”

    我安装了 matplotlib 但 python 3 8 10 显示了这个错误 AttributeError module matplotlib has no attribute font manager What i am doing w
  • 在 jupyter 笔记本中运行 pytest 测试函数

    我正在制作有关 python 测试选项的演示 我想要演示的技术之一是 pytest 我计划使用 jupyter ipython 笔记本进行演示 理想情况下 我希望能够在单元格中定义一个测试函数 然后使用 pytest 运行该函数 这样我就可
  • 检查数组中是否有 3 个连续值高于某个阈值

    假设我有一个像这样的 np array a 1 3 4 5 60 43 53 4 46 54 56 78 有没有一种快速方法来获取 3 个连续数字都高于某个阈值的所有位置的索引 也就是说 对于某个阈值th 得到所有x其中 a x gt th
  • Python - 使用 BeautifulSoup 从 URL 列表中抓取文本的最简单方法

    使用 BeautifulSoup 从几个网页 使用 URL 列表 中抓取文本的最简单方法是什么 有可能吗 最好的 乔治娜 import urllib2 import BeautifulSoup import re Newlines re c
  • 使用和不使用 SciPy 计算 k 组合的数量

    我对这个函数感到困惑combSciPy 的 http docs scipy org doc scipy 0 14 0 reference generated scipy misc comb html看起来比简单的 Python 实现要慢 这

随机推荐