Articles of subprocess

Pythonsubprocess无法捕获Windows程序的输出

使用stdout=subprocess.PIPE停止输出到控制台,但是不会捕获任何内容。 >>> import subprocess >>> proc = subprocess.Popen(['C:\\Users\\me\\program.exe']) >>> ERROR: please provide an argument // TRUNCATED USAGE OUTPUT proc.wait() 0 >>> proc = subprocess.Popen([''C:\\Users\\me\\program.exe''], stdout=subprocess.PIPE) >>> proc.communicate() ('', None) 我已经尝试了每个组合可用在stackoverflow。 shell=True没有工作。 产生一个子cmd没有奏效。 subprocess.check_output捕获任何东西。 我很高兴在评论中重试这些命令。 我猜这与程序附加到shell有关。 这是程序用来输出的程序集( mcall只是一个将内存alignment到16位的macros)。 我包含这个的原因是GetStdHandle正在影响事情。 console_write PROC ; rcx MSG ; rdx LEN prologue push rcx push rdx xor rcx, rcx mov […]

在python中使用subprocess运行utf-8编码的windowsbatch file

当试图运行使用utf-8编码的Windowsbatch file时,使用Windows 7下的Python 2.7,batch file的第一个命令无法识别(请参阅示例)。 最有可能的是,被解释为字符。 我如何让底层的shell正确运行batch file? 所调用的batch file来自第三方。 这里是一个简单的python脚本,它重现了这个问题: import codecs import subprocess content = "@echo off" with codecs.open('test_utf8.bat', 'w', 'utf-8-sig') as f: f.write(content) f.close() with open('test_ansi.bat', 'w') as f: f.write(content) f.close() print "Calling test_ansi.bat" subprocess.call('test_ansi.bat', shell=True) print "Calling test_utf8.bat" subprocess.call('test_utf8.bat', shell=True) print "Done" 运行脚本将提供以下输出 t:\tmp\test>python test.py Calling test_ansi.bat Calling test_utf8.bat t:\tmp\test>´╗┐@echo off […]

Python:当父母死亡时如何杀死subprocess?

subprocess开始于 subprocess.Popen(arg) 有没有办法确保父母exception终止时会死亡? 我需要这个在Windows和Linux上工作。 我知道这个Linux的解决scheme 。 编辑: 使用subprocess启动subprocess的需求。如果解决scheme使用不同的启动进程的方法存在,则可以放宽subprocess.Popen(arg) 。

为什么subprocess.Popen参数长度限制小于操作系统报告的限制?

我在Linux 3.16.0上运行Python 3.4.3。 我想使用subprocess.Popen来运行一个长单参数(一个复杂的Bash调用),大约200KiB的命令。 根据getconf和xargs ,这应该是在我的范围内: $ getconf ARG_MAX 2097152 $ xargs –show-limits < /dev/null Your environment variables take up 3364 bytes POSIX upper limit on argument length (this system): 2091740 POSIX smallest allowable upper limit on argument length (all systems): 4096 Maximum length of command we could actually use: 2088376 Size of command buffer […]

Python脚本和linux shell之间的交互

我有一个Python脚本,需要通过命令行与用户进行交互,同时logging输出的内容。 我目前有这样的: # lots of code popen = subprocess.Popen( args, shell=True, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stdout, executable='/bin/bash') popen.communicate() # more code 这就像在terminal中inputshell命令一样执行shell命令(例如adduser newuser02),包括交互行为。 这很好。 现在,我想从Python脚本中logging出现在屏幕上的所有内容。 但我似乎无法使这部分工作。 我已经尝试了使用subprocess.PIPE的各种方法,但是这通常会使交互性紊乱,就像不输出提示string一样。 我也尝试过不同的方法来直接改变sys.stdout的行为,但是当subprocess直接写入sys.stdout.fileno()时,这一切都没有用。

复制Pythonsubprocess的terminal输出

我正在调用忍者c / c + +构build系统的包装脚本,脚本是在Python中,它应该做的一件事是logging忍者和底层编译器的输出,但不抑制标准输出。 给我麻烦的部分是,忍者似乎检测到它正在写入terminal或不,所以简单地捕捉输出并发送到标准输出结束了改变它(最值得注意的是,忍者不填充屏幕列表警告和错误的构build文件,但删除最后成功build立的翻译单位的行,因为一个新的进来)。 有没有办法让忍者写入terminal,同时仍然捕获其输出? 写入到terminal应该发生在忍者subprocess运行,但是捕获所述输出可能要等到subprocess完成。

如何在运行时安装和导入Python模块?

我想写一个脚本来自动设置一个全新的Ubuntu安装并安装一个基于Django的应用程序。 由于脚本将在新服务器上运行,因此Python脚本需要自动安装一些必需的模块。 这是脚本。 #!/usr/bin/env python import subprocess import os import sys def pip_install(mod): print subprocess.check_output("pip install %s" % mod, shell=True) if __name__ == "__main__": if os.getuid() != 0: print "Sorry, you need to run the script as root." sys.exit() try: import pexpect except: pip_install('pexpect') import pexpect # More code here… pexpect的安装是成功的,但是下一行import pexpect失败了。 我认为它是因为在运行时代码不知道新安装的pexpect 。 如何在运行时安装和导入Python模块? […]

如何分配IP地址到Python中的接口?

我有python脚本,为我的无线和有线接口设置IP4地址。 到目前为止,我使用subprocess命令如: subprocess.call(["ip addr add local 192.168.1.2/24 broadcast 192.168.1.255 dev wlan0"]) 我怎样才能使用python库设置接口的IP地址? 如果有什么办法可以使用python库获得已经存在的IPconfiguration?

我怎样才能让Perl等待在system()后台启动的subprocess?

我有一些执行多个参数的shell脚本的Perl代码,为了简化,我假设我有这样的代码: for $p (@a){ system("/path/to/file.sh $p&"); } 之后我想做更多的事情,但是我无法find一种方法来等待所有的subprocess完成,然后再继续。 转换代码使用fork()将是困难的。 有没有更简单的方法?

Python 3.4.3 subprocess.Popen得到没有pipe道命令的输出?

我正在尝试将一个命令的输出分配给一个variables,而不是该命令的输出。 其原因在于,如果正在pipe理,正在讨论的命令会将未格式化的文本输出为输出,但如果正在从terminal运行,则会提供彩色格式的文本。 我需要得到这个颜色格式的文本。 到目前为止,我已经尝试了一些东西。 我已经尝试过Popen了: output = subprocess.Popen(command, stdout=subprocess.PIPE) output = output.communicate()[0] output = output.decode() print(output) 这可以让我打印输出,但它给了我input命令时得到的无格式输出。 这是有道理的,因为我在Python代码中将其pipe道化。 但是我很好奇,如果有一种方法可以将这个命令的输出直接分配给一个variables,而不需要运行pipe道本身的pipe道版本。 我也尝试了依赖于check_output的以下版本: output = subprocess.check_output(command) output = output.decode() print(output) 再次,我得到相同的未格式化输出,命令返回时,命令是pipe道。 有没有办法获得格式化的输出,命令通常从terminal给出的输出,当它不被pipe道?