标签: popen

具有修改环境的Python子进程/ Popen

我认为运行带有稍微修改环境的外部命令是一种非常常见的情况.这就是我倾向于这样做的方式:

import subprocess, os
my_env = os.environ
my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]
subprocess.Popen(my_command, env=my_env)
Run Code Online (Sandbox Code Playgroud)

我有一种直觉,觉得有更好的方法; 看起来好吗?

python subprocess popen

255
推荐指数
6
解决办法
16万
查看次数

指定popen的工作目录

有没有办法在Python中指定命令的运行目录subprocess.Popen()

例如:

Popen('c:\mytool\tool.exe', workingdir='d:\test\local')
Run Code Online (Sandbox Code Playgroud)

我的Python脚本位于 C:\programs\python

是否可以C:\mytool\tool.exe在目录中运行D:\test\local

如何设置子流程的工作目录?

python subprocess popen

174
推荐指数
2
解决办法
14万
查看次数

子进程Popen和call之间的区别是什么(我该如何使用它们)?

我想从Python调用外部程序.我已经使用了两者Popen()并且call()做到了这一点.

这两者有什么区别?

我的具体目标是从Python运行以下命令.我不确定重定向是如何工作的.

./my_script.sh > output
Run Code Online (Sandbox Code Playgroud)

我阅读了文档,它说这call()是一个便利功能或快捷功能.我们是否通过使用call()代替Popen()?而失去了任何力量?

python subprocess popen

164
推荐指数
2
解决办法
9万
查看次数

如何使用subprocess popen Python

由于os.popen被subprocess.popen取代,我想知道如何转换

os.popen('swfdump /tmp/filename.swf/ -d')
Run Code Online (Sandbox Code Playgroud)

到subprocess.popen()

我试过了:

subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename))  # NOTE: filename is a variable
                                                # containing /tmp/filename.swf
Run Code Online (Sandbox Code Playgroud)

但我想我没有正确地写出来.任何帮助,将不胜感激.谢谢

python subprocess popen

86
推荐指数
4
解决办法
26万
查看次数

Python popen命令.等到命令完成

我有一个脚本,我用popen启动一个shell命令.问题是脚本不会等到popen命令完成后立即继续.

om_points = os.popen(command, "w")
.....
Run Code Online (Sandbox Code Playgroud)

如何判断我的Python脚本要等到shell命令完成?

python subprocess popen wait

65
推荐指数
6
解决办法
13万
查看次数

为什么Popen.communicate()返回b'hi \n'而不是'hi'?

有人可以解释为什么我想要的结果,"嗨",前面有一个字母'b',后跟一个换行符?

我使用的是Python 3.3

>>> import subprocess
>>> print(subprocess.Popen("echo hi", shell=True,
                           stdout=subprocess.PIPE).communicate()[0])
b'hi\n'
Run Code Online (Sandbox Code Playgroud)

如果我用python 2.7运行它,则不会出现这个额外的'b'

python subprocess popen

61
推荐指数
4
解决办法
6万
查看次数

是否可以在子进程中运行函数而无需线程化或编写单独的文件/脚本.

import subprocess

def my_function(x):
    return x + 100

output = subprocess.Popen(my_function, 1) #I would like to pass the function object and its arguments
print output 
#desired output: 101
Run Code Online (Sandbox Code Playgroud)

我只找到了使用单独脚本打开子进程的文档.有谁知道如何传递函数对象甚至是一种简单的方法来传递函数代码?

python subprocess function popen python-multiprocessing

59
推荐指数
4
解决办法
7万
查看次数

使用python脚本启动shell命令,等待终止并返回脚本

我有一个python脚本,必须为dir中的每个文件启动一个shell命令:

import os

files = os.listdir(".")
for f in files:
    os.execlp("myscript", "myscript", f)
Run Code Online (Sandbox Code Playgroud)

这适用于第一个文件,但在"myscript"命令结束后,执行停止并且不会返回到python脚本.

我能怎么做?我fork()以前需要calling os.execlp()吗?

python subprocess popen os.execl

57
推荐指数
4
解决办法
15万
查看次数

python子进程Popen环境PATH?

我对subprocess使用时如何搜索可执行文件感到困惑Popen().如果给定子进程的绝对路径,它可以工作,但我正在尝试使用相对路径.我发现如果我设置环境变量PYTHONPATH然后我可以从该路径获得导入的模块,并且PYTHONPATH存在sys.path,但它似乎没有帮助的行为subprocess.Popen.我也尝试过编辑sitecustomize.py添加PYTHONPATH 的文件os.environ,就像这样

# copy PYTHONPATH environment variable into PATH to allow our stuff to use
# relative paths for subprocess spawning
import os
if os.getenv('PYTHONPATH') is not None and os.getenv('PATH') is not none:
    os.environ['PATH'] = ':'.join([os.getenv('PATH'), os.getenv('PYTHONPATH')])
Run Code Online (Sandbox Code Playgroud)

并且验证了在启动python时,无论是交互式地,使用ipython,还是通过从命令行运行脚本,PYTHONPATH都成功出现os.environ.但是,subrocess.Popen 仍然不在那里搜索可执行文件.如果没有env指定kwarg ,我认为它应该继承父母的环境?接下来我尝试env明确地给出,首先通过制作副本,os.getenv然后仅仅通过给予env={'PATH': '/explicit/path/to/search/from'},它仍然找不到可执行文件.现在我很难过.

希望一个例子可以帮助我更清楚地解释我的问题:

/ dir/subdir1/some_executable
/dir/subdir2/some_script.py

# some_script.py
from subprocess import Popen, PIPE
spam, eggs = Popen(['../subdir1/some_executable'], …
Run Code Online (Sandbox Code Playgroud)

python environment subprocess path popen

56
推荐指数
2
解决办法
6万
查看次数

杀死使用Python的subprocess.Popen()创建的进程

这是我的想法:

首先,我使用subprocess.Popen创建了一个进程

第二,经过一段时间后,我试图通过Popen.kill杀死它()

import subprocess
import os, signal
import time

proc1 = subprocess.Popen("kvm -hda /path/xp.img", shell = True)
time.sleep(2.0)
print 'proc1 = ', proc1.pid
subprocess.Popen.kill(proc1)
Run Code Online (Sandbox Code Playgroud)

但是,"proc1"仍然存在于Popen.kill()之后.任何专家都可以告诉我如何解决这个问题吗?我很感激你的考虑.

感谢所有专家的评论,我做了你所做的一切,但结果仍然保持不变.

proc1.kill() #it sill cannot kill the proc1

os.kill(proc1.pid, signal.SIGKILL) # either cannot kill the proc1
Run Code Online (Sandbox Code Playgroud)

谢谢你们.

我仍然在等待你解决这个微妙问题的宝贵经验.

python popen

51
推荐指数
4
解决办法
11万
查看次数