我有以下代码,可以很好地运行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''
答案 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函数。