一、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操作。