【发布时间】:2020-10-18 17:09:49
【问题描述】:
我知道这里已经发布了许多类似的问题但它们似乎都不适用于我的情况。我的 bash 配置文件中有一些命令,如下所示
export HEADAS=/Users/heasoft/x86_64-apple-darwin18.7.0
alias heainit=". $HEADAS/headas-init.sh"
. $HEADAS/headas-init.sh
export SAS_DIR=/Users/sas-Darwin-16.7.0-64/xmmsas
alias sas=". $SAS_DIR/setsas.sh"
sit='source ~/.bash_profile'
我在其中创建了一个别名来连续运行它们:alias prep1='sit; heainit; sas。当我在命令行中执行它时,这工作得很好。但我想插入一个 python 脚本并从那里运行它。我正在运行 Python (v 3.7.4)。所以,正如here 所建议的,我尝试了
import subprocess
command = "prep1"
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None, shell=True)
output = process.communicate()
print(output[0].decode())
但我收到一条错误消息,提示找不到命令。我尝试将其导出到 bash 配置文件中,但收到一条错误消息,指出 -bash: export: prep1: not a function
我也尝试了here建议的方法,但还是不行。与此相关,我什至无法在 python 中运行如下 shell 命令
epatplot set=evli.FTZ plotfile="pn_filtered_pat.ps" 2>&1 | tee pn_filtered_pat.txt
这是我的 Python 脚本尝试
command = "epatplot set=evli.FTZ plotfile="pn_filtered_pat.ps" 2>&1 | tee pn_filtered_pat.txt"
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
我收到SyntaxError: invalid syntax。我知道这个语法错误来自哪里,但不知道如何解决。
我是 python 的初学者,所以我很感激任何帮助/指导。
【问题讨论】:
-
您可以创建一个 bash 子进程,它会读取您的别名命令,但是您将如何处理它呢?你不能在同一个子进程中执行它们(除非你为非交互式 shell 显式打开别名处理),当然它们的定义在你以后创建的每个其他子进程中都消失了。
标签: python python-3.x bash shell subprocess