在Python中使用os.system调用多个命令

问题描述 投票:0回答:9

我想从我的 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.

现在,第三次启动调用不起作用。

python unix subprocess command
9个回答
34
投票

os.system
是 C 标准库函数
system()
的包装。它的参数可以是任何有效的 shell 命令,只要它适合为进程的环境和参数列表保留的内存。

因此,用分号或换行符分隔每个命令,它们将在同一环境中依次执行。

os.system(" ls -l; <some command>; launchMyApp")
os.system('''
ls -l
<some command>
launchMyApp
''')

9
投票

试试这个

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.

3
投票

每个进程都有自己的当前工作目录。通常,子进程无法更改父进程的目录,这就是为什么

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
参数来代替


3
投票

这真的很简单。 对于 Windows,请使用

&
分隔命令;对于 Linux,请使用
;
分隔命令。
str.replace
是解决该问题的一个非常好的方法,在下面的示例中使用:

import os
os.system('''cd /
mkdir somedir'''.replace('\n', ';')) # or use & for Windows

1
投票

当您调用 os.system() 时,每次创建子 shell 时 - 当 os.system 返回时立即关闭(subprocess 是调用操作系统命令的推荐库)。如果您需要调用一组命令 - 在一次调用中调用它们。 顺便说一句,你可以从 Python 更换工作主管 - os.chdir


1
投票

尝试使用 subprocess.Popen

cwd

示例:

subprocess.Popen('launchMyApp', cwd=r'/working_directory/')

-1
投票

os.system("ls -l && <some command>")


-1
投票

您可以使用

os.chdir()

改回您需要所在的目录

-1
投票

只需使用

// 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 方法在那里更好。 虽然小任务链接复制、移动、列表都可以正常工作

.

© www.soinside.com 2019 - 2024. All rights reserved.