【问题标题】:How to store values to a file in shell script when executing the shell script from python file?从 python 文件执行 shell 脚本时,如何将值存储到 shell 脚本中的文件?
【发布时间】:2021-12-08 07:41:37
【问题描述】:

我需要从 python 文件触发一个 shell 脚本。该 shell 脚本需要执行一些命令并将数据存储在另一个文件中。

问题: 我可以从 python 触发 shell 脚本,但是在 shell 脚本中执行的命令给出了空响应并将 "Cg==" 存储在相应的文件中。

Shell 脚本:randscript.sh

生成随机值并将其存储到新文件中。

echo Pass = $(echo $RANDOM | base64 | head -c 20)>>newfile

Python:randfile.py

执行python文件触发shell脚本。

import os
import subprocess
def rand_func():
  try:
    path = '/home/ubuntu/execution'
    os.chdir(path)
    script_exec = subprocess.call(['sh','./randscript.sh'])
    print(script_exec)
    return True
  except Exception as err:
    print("Exception")
    return False
func_exec = rand_func()

注意:当手动执行命令时,它会返回预期值(给出随机值)。但是通过 python 脚本,它返回“Cg==”(这是一个换行符)。 谁能帮我理解这一点?

【问题讨论】:

  • 尝试在你的shell脚本的第一行添加source ~/.bashrc

标签: python bash shell random


【解决方案1】:

除非您使用的是 3.5 之前的 Python 版本,否则您可以调整:

import subprocess
import os

os.chdir('/home/ubuntu/execution')

r = subprocess.run(['/bin/sh', './randscript.sh'], capture_output=True)
print(r.stdout.decode())

我假设您的 shell 脚本将相关输出发送到标准输出流。

自发布此答案以来,已对该问题进行了编辑。该脚本向标准输出流发出任何内容。因此,我的回答是行不通的。通过添加:

cat newfile

...到脚本的末尾,这将起作用。

另一个(更好的)选择是:

echo Pass = $(echo $RANDOM | base64 | head -c 20) | tee -a newfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2013-04-08
    • 1970-01-01
    • 2018-05-19
    • 2011-05-21
    • 1970-01-01
    相关资源
    最近更新 更多