我有一个使用python os.system()
执行的单行bash命令for FILENAME in mydir/PRE_*; do echo $FILENAME `printf ${FILENAME:0:12}; printf ${FILENAME:23}`; done;
它遍历目录中的所有文件并重命名它们,从文件名中取出12-23个字符。当我通过bash使用我的服务器登录执行它时,该命令工作正常,但是当我通过python与web用户执行它时会抛出错误。
我发现这是因为Web用户的默认shell是/ bin / sh而不是/ bin / bash。
我可以使用该用户登录并将shell更改为/ bin / bash。
所以问题是我可以强制使用/ bin / bash执行单行程序而不更改用户的默认shell吗?
答案 0 :(得分:2)
可能你可以称之为:
/bin/bash -c '$cmd'
其中$cmd
是完整的命令行。
答案 1 :(得分:0)
from subprocess import Popen, PIPE, STDOUT
p = Popen(['/bin/bash','-'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
cmdout = p.communicate(input='uname -a\nuptime\nprintenv\n')[0]
print(cmdout)