Articles of 子

如何确定通过os.system启动的进程的PID

我想用程序启动几个子foo.py ,即模块foo.py启动foo.py几个实例。 由于我有时不得不手动终止进程,我需要进程id来执行kill命令。 即使整个设置是相当“脏”,是否有一个良好的pythonic方式来获得进程的pid ,如果进程是通过os.system启动? foo.py: import os import time os.system("python bar.py \"{0}\ &".format(str(argument))) time.sleep(3) pid = ??? os.system("kill -9 {0}".format(pid)) bar.py: import time print("bla") time.sleep(10) % within this time, the process should be killed print("blubb")

如何获得进程的祖父母身份证

我怎样才能得到当前进程的父进程ID? 一般给一个进程ID我怎么能得到它的父进程ID? 比如os.getpid()可以用来获取父进程的id和os.getppid(),我如何得到祖父母, 我的目标是Linux(Ubuntu的),所以平台的具体答案是好的。

如何从subprocess.Popen()获取输出

我想从执行Test_Pipe.py输出,我试过在Linux上的代码,但它没有工作。 Test_Pipe.py import time while True : print "Someting …" time.sleep(.1) Caller.py import subprocess as subp import time proc = subp.Popen(["python", "Test_Pipe.py"], stdout=subp.PIPE, stdin=subp.PIPE) while True : data = proc.stdout.readline() #block / wait print data time.sleep(.1) proc.stdout.readline()被封锁,所以没有数据打印出来。

Popen冲突的可执行文件/path

我想使用Popen从Python脚本中调用ImageMagick中的“convert”实用程序,如下所示: Popen(["convert", input_path, "-flop", output_file_path]) (上面的例子简单地反转了图像水平) 问题是,当我在Windows中运行脚本时,它错误地调用Windows附带的convert.exe实用程序将FAT分区转换为NTFS! (位于\ Windows \ system32) 现在,如果我在system32以外的任何目录中随机打开一个命令提示符并键入“convert”,它就会正确运行ImageMagick可执行文件。 所以,这意味着Popen自动查找system32。 我怎样才能让它不看在system32,并运行正确的可执行文件?

Windows 7 64位上的Pythonsubprocess – stdout = PIPE时不输出

对于有关Pythonsubprocess的另一个问题抱歉,但我找不到答案。 我在一些调用Windows 7 64位subprocess的Python代码时遇到了麻烦。 当subprocess的stdout被发送到pipe道时,不会产生输出。 subprocess似乎运行并终止没有问题,它只是不会产生任何输出。 编辑:相同的代码在WinXP 32bit上正常工作,所以我更新了问题标题。 # (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: 但是,如果子stream程的输出不是pipe道,则会按预期生成输出: # (listing 2) proc = Popen(cmdline,shell=True) proc.communicate() 这给了控制台预期的输出。 我相信可执行文件实际上是将其输出写入标准输出。 我有C源代码,我添加了这一行: fprintf(stdout, "HELLO"); 再次,运行清单2时看到“HELLO”,但没有列出清单1。 我也尝试制作一个新的C ++可执行文件,并从cmdline调用它: #include <iostream> int […]

subprocess:在Windows中删除subprocess

在Windows上, subprocess.Popen.terminate调用win32的TerminalProcess 。 但是,我看到的行为是我正在尝试终止的进程的subprocess仍在运行。 这是为什么? 如何确保stream程启动的所有subprocess都被终止?

process.communicate和getche()失败

我正在尝试自动执行用C ++编写的交互式命令行工具。 启动时,二进制等待字母S,Q或P(状态,退出或暂停)。 它使用一个非标准的msvcrt函数“getche”来获取关键笔划(而不是一个gets()例如),而用户不必敲击input。 我尝试以标准的方式与进程进行通信(写入stdin并使用process.communicate []),但是没有得到input。 经过几个小时的尝试不同的事情,我在Visual Studio中创build了两个小的示例项目来复制这个问题,并确保我是正常的(ish)。 这是用来调用二进制文件的python脚本: import subprocess import time cmd = ["test-getch.exe"] process = subprocess.Popen(cmd, stderr = subprocess.PIPE, stdin = subprocess.PIPE, stdout = subprocess.PIPE) i = process.stdin #msvcrt.ungetch('s') i.write("S\n") print process.communicate()[0] i.close() time.sleep(3) print "DONE" 这是两个二进制文件。 这第一个我可以沟通: #include "stdafx.h" #include <conio.h> int _tmain(int argc, _TCHAR* argv[]) { char response [2]; printf("Enter […]

如何使用subprocess和Popen从我的.exe文件获得所有输出?

我试图运行一个可执行文件,并使用subprocess.Popen捕获其输出; 然而,我似乎没有得到所有的输出。 import subprocess as s from subprocess import Popen import os ps = Popen(r'C:\Tools\Dvb_pid_3_0.exe', stdin = s.PIPE,stdout = s.PIPE) print 'pOpen done..' while: line = ps.stdout.readline() print line 它手动打开时打印两行比原来的exe文件less。 我尝试了另一种方法,结果相同: f = open('myprogram_output.txt','w') proc = Popen('C:\Tools\Dvb_pid_3_0.exe ', stdout =f) line = proc.stdout.readline() print line f.close() 任何人都可以请帮我得到exe的完整数据? 正如塞巴斯蒂安所问: 原始的exe文件最后几行o / p: -Gdd:通用计数(1 – 1000) -Cdd:从(0 […]

如何处理需要交互式响应的可执行文件?

我有一个名为tsfoil2.exe的可执行文件,我想从我的python环境中运行这个.exe文件。 我正在运行Python 2.7.3,在Windows 7上运行Spyder 2.1.11。 为了运行.exe,它需要一些input,默认硬盘驱动器('I:\'),输出文件的名称('test')以及input文件的名称('SC20610.inp') 。 我的一位同事build议我使用os.system,并提供一个包含所有参数的临时input文件。 f = open('temp', 'w') f.write('I:\ \n') f.write('test \n') f.write('SC20610.inp\n') f.close() 然后,我以下面的方式将这个文件的参数提供给.exe: os.system("tsfoil2.exe < temp") 这一切工作,但程序需要一个“ENTER”closures。 由于某种原因,.exe被反复询问'按ENTER键退出'。 即使在我的Spyder控制台中按下回车键,程序也不会终止。 有没有办法让“ENTER”键作为交互式input到.exe? 我试图使用SendKeys类,但是因为程序不终止,所以它没有到达包含SendKeys命令的代码行。 我也试图将它包含在参数文件中,但是这也不起作用。 此外,我还发现切换到subprocess命令可能是有益的,因为它可能会给我更多的执行命令,但是我还没有能够使用input文件运行可执行文件。 是否可以使用os.system提供必要的“确认”,或者我应该切换到subprocess,如果是这样,我怎样才能构build一个类似于os.system(“tsfoil2.exe <temp”)的方法现在使用。 我试过这个: import subprocess as sub f = open('temp', 'w') f.write('I:\ \n') f.write('test \n') f.write('SC20610.inp\n') f.close() proc=sub.Popen(["tsfoil2.exe","temp"], shell=True) 和这个 import subprocess as sub p=sub.Popen('tsfoil2.exe') p.communicate(input='I:' […]

如何从Python(2.7)中产生的进程中消除Windows控制台?

可能重复: 在没有控制台的情况下用Popen在pythonw中运行一个进程 我在Windows上使用python 2.7来使用dcraw和PIL自动化批量RAW转换。 问题是我打开一个Windows控制台,每当我运行dcraw(这发生每隔几秒钟)。 如果我使用.py作为脚本来运行脚本,那么它就不那么烦人了,因为它只能打开主窗口,但我更愿意只显示GUI。 我如此参与: args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile] proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE) ppm_data, err = proc.communicate() image = Image.open(StringIO.StringIO(ppm_data)) 感谢里卡多·雷耶斯 对于这个配方的小修改,在2.7中,似乎你需要从_subprocess获得STARTF_USESHOWWINDOW (如果你想要的东西可能不太容易改变,你也可以使用pywin32 ),所以对于后人来说: suinfo = subprocess.STARTUPINFO() suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo)