icn*_*icn 174 python subprocess 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?
如何设置子流程的工作目录?
Mar*_*off 253
subprocess.Popen 采用cwd参数设置当前工作目录; 你还想要转义反斜杠('d:\\test\\local'),或者使用r'd:\test\local'反斜杠不被Python解释为转义序列.你写它的方式,该\t部分将被翻译成一个tab.
所以,你的新行应该是这样的:
subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local')
Run Code Online (Sandbox Code Playgroud)
要将Python脚本路径用作cwd,import os并使用以下命令定义cwd:
os.path.dirname(os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)
ash*_*mun 12
其他方法就是简单地这样做
cwd = os.getcwd()
os.chdir('c:\some\directory')
subprocess.Popen('tool.exe')
os.chdir(cwd)
Run Code Online (Sandbox Code Playgroud)
如果您想依赖相对路径,例如,如果您的工具的位置是c:\some\directory\tool.exe. cwd关键字参数 forPopen不会让你这样做。某些脚本/工具可能依赖于您在调用它们时位于给定目录中。为了使此代码噪音更少,也称为将与更改目录相关的逻辑与“业务逻辑”分离,您可以使用装饰器。
def invoke_at(path: str):
def parameterized(func):
def wrapper(*args, **kwargs):
cwd = os.getcwd()
os.chdir(path)
try:
ret = func(*args, **kwargs)
finally:
os.chdir(cwd)
return ret
return wrapper
return parameterized
Run Code Online (Sandbox Code Playgroud)
这样的装饰器可以这样使用:
@invoke_at(r'c:\some\directory')
def start_the_tool():
subprocess.Popen('tool.exe')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141719 次 |
| 最近记录: |