如何从python文件中执行bash?

时间:2013-01-05 17:44:51

标签: python bash execute

我想知道是否可以在python文件中执行bash代码。我不是说运行一个完全不同的bash文件。我正在寻找一种方法来轻松执行长度为一行或更长的bash代码。具体来说,我想从我今天早些时候提出的一个问题中执行这个代码。

shopt -s nullglob
dirs=(*/)
cd -- "${dirs[RANDOM%${#dirs[@]}]}"

5 个答案:

答案 0 :(得分:4)

将字符串作为sh脚本运行(假设POSIX):

#!/usr/bin/env python
from subprocess import check_call as x

x("""pwd
cd /
pwd""", shell=True)

您可以明确指定命令:

x(["bash", "-c", '''shopt -s nullglob
dirs=(*/)
pwd
cd -- "${dirs[RANDOM%${#dirs[@]}]}"
pwd'''])

注意:它只检查您是否可以cd进入随机子目录。在bash脚本之外看不到更改。

你可以在没有bash的情况下做到这一点:

#!/usr/bin/env python
import os
import random

print(os.getcwd())
os.chdir(random.choice([d for d in os.listdir(os.curdir) if os.path.isdir(d)]))
print(os.getcwd())

您也可以使用glob

from glob import glob

randomdir = random.choice(glob("*/"))

os.listdir()相比的差异是glob()过滤以点.开头的目录。您可以手动过滤它:

randomdir = random.choice([d for d in os.listdir(os.curdir)
                           if (not d.startswith(".")) and os.path.isdir(d)])

答案 1 :(得分:1)

你可以执行bash代码,但它的任何影响(特别是cd)只会影响它运行的子进程,所以没有意义。相反,使用Python命令完全可以做到这一点(查看glob)。

答案 2 :(得分:1)

您可以使用os.system模块中的subprocess或函数,并将shell参数设置为true。

请注意,您在bash中执行的许多操作都可以在Python中轻松完成,同时保持平台独立性。例如,我最近尝试在Windows上运行一个Python脚本,该脚本使用许多unix命令来执行简单的操作,例如grepping一些文本,因此失败。

答案 3 :(得分:0)

最好的方法是使用commands module

例如:

>>> import commands
>>> (status,output)=commands.getstatusoutput("ls")
>>> print(output)#print the output
>>> print(status)#print the status of executed command

答案 4 :(得分:0)

您也可以这样做。

import os
os.system("system call 1")
os.system("system call 2")

(etc)

您可以这种方式编写shell脚本,并使用Python(更好的)循环和条件执行工具。