有没有办法在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?
如何设置子流程的工作目录?
如果我echo a; echo b在bash中运行,结果将是两个命令都运行.但是,如果我使用subprocess,则运行第一个命令,打印出整个行的其余部分.下面的代码是echos a; echo b而不是a b,如何让它运行这两个命令?
import subprocess, shlex
def subprocess_cmd(command):
process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
proc_stdout = process.communicate()[0].strip()
print proc_stdout
subprocess_cmd("echo a; echo b")
Run Code Online (Sandbox Code Playgroud) 正如标题所揭示的那样,我们正在编写一个Unix风格的shell实用程序U,应该从bash调用(在大多数情况下).
究竟是如何能ü改变的bash(一般或父母)的工作目录?
PS shell实用程序chdir成功完成相同的操作,因此必须有一种实现该效果的编程方式.
Popen 的文档提到你不能指定相对于'change working directory'kwarg的可执行路径.
如果
cwd不是None,则子项的当前目录将在cwd执行之前更改为 .请注意,在搜索可执行文件时不考虑此目录,因此您无法指定程序相对于的路径cwd.
但是python在我的系统上的行为似乎直接与这种说法相矛盾:
wim@SDFA100461C:/tmp$ mkdir a
wim@SDFA100461C:/tmp$ cp /bin/ls /tmp/a/my_ls
wim@SDFA100461C:/tmp$ mkdir b
wim@SDFA100461C:/tmp$ touch /tmp/b/potato
wim@SDFA100461C:/tmp$ cd /home/wim
wim@SDFA100461C:~$ python
Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import check_output
>>> check_output(['../a/my_ls'], cwd='/tmp/b')
'potato\n'
>>> check_output(['../a/my_ls'])
OSError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)
是否使用相对路径来cwd依赖于平台并且不应该依赖它?或者这是一个文档错误?
(这个问题从评论通过glglgl产卵这里)
我有这个程序 Namechange.py ,它可以更改文件的名称(总是削减一些无用的结尾)。一切工作正常,但我在很多不同的目录中经常使用这个文件,当我想更改某些内容时,这很麻烦。我正在搜索的是一个 python 脚本,它让我可以在我选择的目录中执行该脚本。
我的第一个想法是运行另一个脚本,将 Namechange.py 复制到所需的目录中,然后在那里执行它,并在一切完成后将其删除。复制部分有效。到目前为止,我尝试使用符号链接(它只是执行工作目录中的脚本:D)以及子进程模块,它表示当我使用时没有这样的目录:
subprocess.call(["cd", newpath])
newpath 是我要使用脚本的目录的绝对路径。
出现错误 OSError: [Errno 2] 没有这样的文件或目录。
如果有人有一种优雅的方式来实现这一目标,我会很高兴。
谢谢,再见
我尝试做一个"pwd"或cwd,在cd之后,当我们使用os.system("cd")时它似乎不起作用.是否存在创建子进程的方式.这都是在Linux下.
我需要在不更改全局工作目录的情况下执行操作。我的情况是我有几个文件夹,每个文件夹中都有一些文件。我需要使用这些文件进行一些计算。最初,我尝试了以下方法:
with os.chdir('/directory'):
...some code needing execution inside
Run Code Online (Sandbox Code Playgroud)
但得到了AttributeError: __enter__。在网上阅读后,使用with似乎不是一个选择。因此,我正在寻找另一种优雅的方式来做到这一点。
我也尝试过使用os这样的语句:
cwd = os.getcwd()
os.chdir('/directory')
..run code inside directory
os.chdir(cwd)
Run Code Online (Sandbox Code Playgroud)
但这在调试过程中很痛苦,而且似乎是一种不好的做法。
我正在尝试编写python代码,它将在linux机器的cmd终端中执行以下步骤
cd /path/to/destination/
3dAFNItoNIFTI *epi*
Run Code Online (Sandbox Code Playgroud)
我试过subprocess.call两次,一次cd,然后执行该命令.但似乎没有用.
有没有办法使用子进程调用两行inux命令代码?
谢谢!