如何在python文件中执行bash?

2024-09-28 01:29:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: 文件方法代码bashcddirsshoptnullglob
3条回答

您可以执行bash代码,但是它的任何效果(特别是cd)只会影响它运行的子进程,因此没有意义。相反,所有这些都可以通过Python命令完全实现(请看^{})。在

您可以使用^{}subprocess模块中的函数,并将shell参数设置为true。在

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

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

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

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

可以显式指定命令:

^{pr2}$

注意:它只检查您是否可以cd到一个随机子目录中。更改在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)])

相关问题 更多 >

    热门问题