使用Python的子流程模块将Python解释器作为子流程运行时遇到问题

用户名

我试图了解Python的子流程模块是如何工作的,并且首先给自己设置了一些我想不到的问题。具体来说,我正在尝试与作为子流程创建的Python解释器进行交互。

我创建了一个测试模块,dummy.py其结构如下:

def hi():
    print "Hi Earth"


hi()

然后,为了测试我使用子流程模块的能力,我编写了一个名为的模块pyrun.py,其结构如下:

import subprocess

def subprocess_cmd1():
    outFile = open("tempy1.tmp",'w')
    proc = subprocess.Popen("pwd", stdin=subprocess.PIPE, stdout=outFile, stderr=outFile, shell=True)
    outFile.close()

def subprocess_cmd2():
    outFile = open("tempy2.tmp",'w')
    proc = subprocess.Popen('python dummy.py', stdin=subprocess.PIPE, stdout=outFile, stderr=outFile, shell=True)
    outFile.close()

def subprocess_cmd3():
    outFile = open("tempy3.tmp",'w')
    proc = subprocess.Popen('python', stdin=subprocess.PIPE, stdout=outFile, stderr=outFile, shell=True)
    proc.communicate('import dummy')
    outFile.close()

def subprocess_cmd4():
    outFile = open("tempy4.tmp",'w')
    proc = subprocess.Popen('python', stdin=subprocess.PIPE, stdout=outFile, stderr=outFile, shell=True)
    proc.communicate('import dummy')
    proc.communicate('dummy.hi()')
    outFile.close()

print "Start"
subprocess_cmd1()
subprocess_cmd2()
subprocess_cmd3()
subprocess_cmd4()
print "Stop"

这个想法是将输入从调用过程发送到子过程,并将所有输出发送到文本文件。

当我尝试从命令行运行pyrun时,得到以下结果:

me@Bedrock1:~/Projects/LushProjects/newCode$ python pyrun.py
Start
Traceback (most recent call last):
  File "pyrun.py", line 42, in <module>
    subprocess_cmd4()
  File "pyrun.py", line 35, in subprocess_cmd4
    proc.communicate('dummy.hi()')
  File "/usr/lib/python2.7/subprocess.py", line 785, in communicate
    self.stdin.write(input)
ValueError: I/O operation on closed file

subprocess_cmd1 - 3运行而不会崩溃。subprocess_cmd4()尝试执行以下语句时出现错误

proc.communicate('dummy.hi()')

这似乎是因为该communicate方法stdin在首次使用后会将管道关闭为什么这样做呢?假设管道应该关闭有什么好处吗?

另外,当我查看tempy3.tmp(我的输出文件subprocess_cmd3的内容时,它缺少Python解释器的“开始”文本-即

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

这是为什么?我将 重定向到了stdoutstderroutFile

最后,为什么tempy4.tmp完全空的?它至少不应该包含崩溃前发送给它的文本吗?(即看起来应该很像tempy3.tmp

用户名

问题是您如何使用subprocess.communicate(),它需要一个字符串。来自文档

https://docs.python.org/2/library/subprocess.html

与进程交互:将数据发送到stdin。从stdout和stderr读取数据,直到到达文件末尾。等待进程终止。可选输入参数应该是要发送给子进程的字符串,如果没有数据要发送给子进程,则为None。

试试这个:

def subprocess_cmd4():
    outFile = open("tempy4.tmp",'w')
    proc = subprocess.Popen('python', stdin=subprocess.PIPE, stdout=outFile, stderr=outFile, shell=True)
    proc.communicate('import dummy\ndummy.hi()\n')
    outFile.close()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Python的子流程模块将Python解释器作为子流程运行时遇到问题

来自分类Dev

使用子流程模块将bash脚本转换为Python

来自分类Dev

在Python的子流程模块中使用PATH

来自分类Dev

使用子流程时读取远程文件时遇到问题

来自分类Dev

使用popen运行或在子流程库中运行时,如何在python命令行上单独打印输入提示?

来自分类Dev

Python子流程模块:“无法建立目录”

来自分类Dev

Python子流程模块和PIPE

来自分类Dev

python FileNotFoundError上的子流程模块

来自分类Dev

无法在Python中使用子流程模块(无此类文件)

来自分类Dev

使用子流程从Python调用PHP

来自分类Dev

使用Python启动和停止子流程

来自分类Dev

如何使用子流程更新参数(Python)

来自分类Dev

使用子流程的Python中的大型命令

来自分类Dev

python子流程在正在运行的子流程中插入命令

来自分类Dev

Python:子流程与本机API

来自分类Dev

Python子流程无效语法

来自分类Dev

Python子流程调用效率

来自分类Dev

Python子流程返回参数

来自分类Dev

Python子流程popen管道

来自分类Dev

在Python子流程模块中过滤出需要终端的命令

来自分类Dev

Python子流程模块:如何重新打开PIPE?

来自分类Dev

Python子流程,为子流程提供输入

来自分类Dev

有人可以解释Python的子流程模块如何与命令提示符通信吗?

来自分类Dev

为什么会在运行时遇到问题?

来自分类Dev

在Plunker中为Angular运行时遇到问题

来自分类Dev

运行python脚本时,子流程始终自动启动

来自分类Dev

Python:在运行子流程时处理中断

来自分类Dev

使用 tox 运行 python 单元测试时遇到问题 - 已安装模块的导入错误

来自分类Dev

如何将Activiti流程定义作为子流程导入主流程?

Related 相关文章

  1. 1

    使用Python的子流程模块将Python解释器作为子流程运行时遇到问题

  2. 2

    使用子流程模块将bash脚本转换为Python

  3. 3

    在Python的子流程模块中使用PATH

  4. 4

    使用子流程时读取远程文件时遇到问题

  5. 5

    使用popen运行或在子流程库中运行时,如何在python命令行上单独打印输入提示?

  6. 6

    Python子流程模块:“无法建立目录”

  7. 7

    Python子流程模块和PIPE

  8. 8

    python FileNotFoundError上的子流程模块

  9. 9

    无法在Python中使用子流程模块(无此类文件)

  10. 10

    使用子流程从Python调用PHP

  11. 11

    使用Python启动和停止子流程

  12. 12

    如何使用子流程更新参数(Python)

  13. 13

    使用子流程的Python中的大型命令

  14. 14

    python子流程在正在运行的子流程中插入命令

  15. 15

    Python:子流程与本机API

  16. 16

    Python子流程无效语法

  17. 17

    Python子流程调用效率

  18. 18

    Python子流程返回参数

  19. 19

    Python子流程popen管道

  20. 20

    在Python子流程模块中过滤出需要终端的命令

  21. 21

    Python子流程模块:如何重新打开PIPE?

  22. 22

    Python子流程,为子流程提供输入

  23. 23

    有人可以解释Python的子流程模块如何与命令提示符通信吗?

  24. 24

    为什么会在运行时遇到问题?

  25. 25

    在Plunker中为Angular运行时遇到问题

  26. 26

    运行python脚本时,子流程始终自动启动

  27. 27

    Python:在运行子流程时处理中断

  28. 28

    使用 tox 运行 python 单元测试时遇到问题 - 已安装模块的导入错误

  29. 29

    如何将Activiti流程定义作为子流程导入主流程?

热门标签

归档