在Python中调用外部命令


在Python中调用外部命令


1. 使用子进程模块

from subprocess import call
call(["ls", "-l"])

2. os模块的system/popen函数

os.system("some_command with args")

将命令和参数传递给系统的shell。这很好,因为您实际上可以以这种方式一次运行多个命令并设置管道和输入/输出重定向。例如:

os.system("some_command < input_file | another_command > output_file")
stream = os.popen("some_command with args")

将做同样的事情,os.system除了它给你一个类似文件的对象,你可以用来访问该进程的标准输入/输出。还有3种其他的popen变体,它们对i / o的处理方式略有不同。如果您将所有内容都作为字符串传递,那么您的命令将传递给shell; 如果你将它们作为列表传递,那么你不必担心逃避任何事情。

3. subprocess模块的Popen类

这是为了取代它,os.popen但由于如此全面而具有稍微复杂的缺点。例如,:

print subprocess.Popen("echo Hello World", shell=True, stdout=subprocess.PIPE).stdout.read()

4. Python 3.5或更高版本,可以使用新subprocess.run功能

>>> subprocess.run(["ls", "-l"])  # doesn't capture output
CompletedProcess(args=['ls', '-l'], returncode=0)

>>> subprocess.run("exit 1", shell=True, check=True)
Traceback (most recent call last):
  ...
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')