Python3运行Alias Bash命令

时间:2016-03-09 19:37:27

标签: python bash shell

我有以下代码,可以很好地运行ls命令。我有一个bash别名我使用alias ll='ls -alFGh'是否有可能让python运行bash命令而不用python加载我的bash_alias文件,解析,然后实际运行完整的命令?

import subprocess

command = "ls"  # the shell command
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None, shell=True)

#Launch the shell command:
output = process.communicate()

print (output[0])

尝试使用命令=" ll"我得到的输出是:

/bin/sh: ll: command not found
b''

1 个答案:

答案 0 :(得分:1)

你做不到。当你运行python进程时,它不知道shell别名。有一些简单的方法可以将文本从父进程传递到子进程(IPC除外),命令行和环境(即导出的)变量。 Bash不支持导出别名。

来自man bash页面:对于几乎所有目的,别名都被shell函数取代。

Bash 支持导出功能,因此我建议您将别名设为一个简单的功能。这样它就从shell导出到python到shell。例如:

在shell中:

ll() { ls -l; }
export -f ll

在python中:

import subprocess

command = "ll"  # the shell command
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None, shell=True)

output = process.communicate()

print(output[0].decode())    # Required if using Python 3

由于您使用的是print()函数,我假设您使用的是python 3.在这种情况下,您需要.decode(),因为返回了一个bytes对象。

有一点hackery,也可以从python创建和导出shell函数。