我有一个python代码,在其中调用shell命令。我执行shell命令的代码部分是:
try:
def parse(text_list):
text = '\n'.join(text_list)
cwd = os.getcwd()
os.chdir("/var/www/html/alenza/hdfs/user/alenza/sree_account/sree_project/src/core/data_analysis/syntaxnet/models/syntaxnet")
synnet_output = subprocess.check_output(["echo '%s' | syntaxnet/demo.sh 2>/dev/null"%text], shell = True)
os.chdir(cwd)
return synnet_output
except Exception as e:
sys.stdout.write(str(e))
现在,当我用一些示例输入在本地文件上运行这段代码时(我做了 cat /home/sree/example.json | python parse.py
)它工作正常,我得到了所需的输出。但我正在尝试用hdfs上的输入运行代码(相同 cat
命令,但输入文件路径来自hdfs),其中包含完全相同类型的json条目,失败时出现错误:
/bin/sh: line 62: to: command not found
list index out of range
我读过关于堆栈溢出的类似问题,解决方法是为正在调用的shell脚本包含shebang行。我有雪邦线 #!/usr/bin/bash
在 demo.sh
脚本。
也, which bash
给予 /usr/bin/bash
.
有人请详细说明。
2条答案
按热度按时间js4nwp541#
在我输入的文本字符串中出现了一些特殊字符的问题
demo.sh
. 我通过储存text
并将该文件的内容发送到demo.sh
.即:
1qczuiv02#
您很少(如果有的话)希望将传递列表参数与
shell=True
. 只需传递字符串:但是,这里并不真正需要shell管道。