我想从我的 python 脚本调用多个命令。 我尝试使用 os.system(),但是,当当前目录更改时我遇到了问题。
示例:
os.system("ls -l")
os.system("<some command>") # This will change the present working directory
os.system("launchMyApp") # Some application invocation I need to do.
现在,第三次启动调用不起作用。
试试这个
import os
os.system("ls -l")
os.chdir('path') # This will change the present working directory
os.system("launchMyApp") # Some application invocation I need to do.
每个进程都有自己的当前工作目录。通常,子进程无法更改父进程的目录,这就是为什么
cd
是内置 shell 命令:它在同一(shell)进程中运行。
每个
os.system()
调用都会创建一个新的 shell 进程。更改这些进程内的目录不会影响父 python 进程,因此不会影响后续的 shell 进程。
要在同一个 shell 实例中运行多个命令,您可以使用
subprocess
模块:
#!/usr/bin/env python
from subprocess import check_call
check_call(r"""set -e
ls -l
<some command> # This will change the present working directory
launchMyApp""", shell=True)
如果您知道目标目录; 使用@Puffin GDI建议的
cwd
参数来代替。
这真的很简单。 对于 Windows,请使用
&
分隔命令;对于 Linux,请使用 ;
分隔命令。str.replace
是解决该问题的一个非常好的方法,在下面的示例中使用:
import os
os.system('''cd /
mkdir somedir'''.replace('\n', ';')) # or use & for Windows
当您调用 os.system() 时,每次创建子 shell 时 - 当 os.system 返回时立即关闭(subprocess 是调用操作系统命令的推荐库)。如果您需要调用一组命令 - 在一次调用中调用它们。 顺便说一句,你可以从 Python 更换工作主管 - os.chdir
os.system("ls -l && <some command>")
您可以使用
os.chdir()
改回您需要所在的目录
只需使用
// it will execute all commands even if anyone in betweeen fails
os.system("first command;second command;third command")
// or, it will try to execite but will stop as any command fails
os.system("first command && second command && third command")
我想你已经知道该怎么做了
注意:如果您正在做复杂的事情,这不是一个非常可靠的方法 使用 CLI 工具进行工作。 Popen 和 subprocess 方法在那里更好。 虽然小任务链接复制、移动、列表都可以正常工作
.