Articles of subprocess

Windows上的Python 2.6:如何终止subprocess.Popen与“壳=真”参数?

有没有办法终止一个启动与“shell”参数设置为“True”的subprocess.Popen类的进程? 在下面的工作最小的例子中(使用wxPython),您可以愉快地打开和终止记事本进程,但是如果将Popen“shell”参数更改为“True”,则记事本进程不会终止。 import wx import threading import subprocess class MainWindow(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title) self.main_panel = wx.Panel(self, -1) self.border_sizer = wx.BoxSizer() self.process_button = wx.Button(self.main_panel, -1, "Start process", (50, 50)) self.process_button.Bind(wx.EVT_BUTTON, self.processButtonClick) self.border_sizer.Add(self.process_button) self.main_panel.SetSizerAndFit(self.border_sizer) self.Fit() self.Centre() self.Show(True) def processButtonClick(self, event): if self.process_button.GetLabel() == "Start process": self.process_button.SetLabel("End process") self.notepad = threading.Thread(target = […]

打开一个unicodepath

我有一个unicode文件名,我想打开。 以下代码: cmd = u'cmd /c "C:\\Pok\xe9mon.mp3"' cmd = cmd.encode('utf-8') subprocess.Popen(cmd) 回报 >>> 'C:\Pokיmon.mp3' is not recognized as an internal or external command, operable program or batch file. 即使该文件确实存在。 为什么发生这种情况?

subprocess.Popen('开始')失败

在Python中运行这将导致WindowsError说明它找不到指定的文件 失败: import subprocess subprocess.Popen('start notepad.exe') 在命令窗口中,它起作用 start notepad.exe 我猜它是一个path的东西,Windows无法定位开始[.exe?]这是位于哪里,所以我可以将其添加到path或只是将其包括在Popen调用。 谢谢

实时从Windows上的subprocess.stdout读取

要强调的是,问题是实时读取而不是非阻塞读取 。 之前有人问过,例如subprocess.Popen.stdout – 再次读取stdout 。 但是没有提出令人满意的解决scheme。 作为一个例子,下面的代码尝试模拟python shell。 import subprocess p = subprocess.Popen(['python'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) while True: line = input('>>> ') p.stdin.write(line.encode()) print('>>> ', p.stdout.read().decode()) 但是,从p.stdout读取时会被阻塞。 经过四处搜寻,我发现了以下两种可能的结果。 使用fctrl和O_NONBLOCK 使用thread和queue 而第一个soution可能工作,只能在linux上工作,第二个soution只是把阻塞读取变成非阻塞读取,即我不能得到subprocess的实时输出。 例如,如果我input“ print("hello") ”, p.stdout使用p.stdout解决scheme时,我将不会从p.stdout获得任何信息。 也许,有人会build议p.communite 。 不幸的是,在这种情况下它不适合,因为它会closuresstdin,如下所述。 那么,有没有Windows的解决scheme? 编辑:即使-u打开, p.stdout.read被replace为p.stdout.readline ,问题仍然存在。 import subprocess p = subprocess.Popen(['python', '-u'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) while True: line = input('>>> […]

从Python执行subprocess而不打开Windows命令提示符

可能重复: 在没有控制台的情况下用Popen在pythonw中运行一个进程 如何从Python(2.7)中产生的进程中消除Windows控制台? 我有一个Python程序几次(使用subprocess.check_call)作为一个subprocess调用一个单独的数字运算程序(用C编写)。 它在Linux上效果很好,除了一件小事外,它在Windows上也很棒:每次调用subprocess时,都会创build一个命令提示符窗口,然后在subprocess退出时很快销毁。 这根本不会影响计算,但是这非常烦人,因为这个窗口在屏幕上和屏幕上不断闪烁,并且使得在计算机上做其他事情变得困难,因为新的命令提示符窗口可以窃取键盘焦点。 我怎样才能简单地执行subprocess(没有GUI),并防止命令提示符窗口被创build?