您的位置:

使用Python调用Shell示例

一、Python与Shell的关系

Python是一种高级编程语言,而Shell则是一种运行在Linux、Unix等类Unix操作系统上的命令行解释器。虽然Python与Shell不是同一类编程语言,但它们可以互相调用,在实际编程中也经常会使用到这种方式。

二、Python使用subprocess模块调用Shell

Python自带了subprocess模块,可以轻松地与Shell进行交互。subprocess模块提供了各种函数,可以启动一个新的进程或子进程来执行Shell命令或执行一个可执行文件。下面是一个简单的Python代码示例:

import subprocess

# 执行一个简单的Shell命令
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8'))

# 执行一个可执行文件
subprocess.run(['./my_executable_file'])

上面的代码中,我们首先使用了run()函数执行了一个Shell命令ls -l,然后使用decode()函数将输出结果解码成可读的字符串。还可以使用subprocess模块来执行Python文件、编译C程序等等。

三、使用Shell执行Python脚本

在Shell中执行Python脚本同样非常简单。只需要在Shell中输入python + 文件路径,就可以运行Python脚本。而如果需要在Python代码中调用Shell来运行Python脚本,则只需要使用subprocess模块即可。下面是一个代码示例:

import subprocess

# 在Python中执行Shell命令执行Python脚本
subprocess.run(['python', '/path/to/my_script.py'])

上面的代码中,我们使用run()函数执行了一个Shell命令python + /path/to/my_script.py,从而在Python代码中执行了一个Python脚本。

四、使用Pipe进行Shell命令的连接

在实际编程过程中,我们可能需要将多个命令连接起来进行执行。这时,可以使用Pipe进行连接。下面是一个Python代码示例:

import subprocess

# 使用Pipe将两个Shell命令连接起来
p1 = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
p2 = subprocess.Popen(['grep', 'my_file'], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
print(output.decode('utf-8'))

上面的代码中,我们首先执行了一个Shell命令ls -l,并将输出结果作为输入传递给了另一个Shell命令grep my_file。这两个命令之间使用了Pipe进行连接,从而实现了Shell命令的串联。

五、使用plumbum库进行Shell操作

除了使用Python自带的subprocess模块以外,还可以使用第三方库plumbum来进行Shell操作。plumbum支持命令行参数和输出格式的灵活控制,是一个非常方便的工具。下面是一个Python代码示例:

from plumbum import SshMachine, local

# 连接SSH
remote_machine = SshMachine('my.server.com')

# 在远程服务器上执行Shell命令
result = remote_machine['ls']('-l', '/path/to/my/directory')
print(result)

# 在本地执行Shell命令
result = local['ls']('-l', '/path/to/my/directory')
print(result)

上面的代码中,我们首先连接了一个SSH服务器,并在远程服务器上执行了一个Shell命令。然后,我们使用local对象在本地执行了一个Shell命令。plumbum提供了很多灵活的接口,可以方便地进行Shell操作。