4 回答
TA贡献1797条经验 获得超4个赞
在您的情况下,您想将一个小整数传递给调用程序。基本上,你有三种可能性,都有缺点或优点。
使用退出代码
如果整数始终为非负且小于 256,您可以通过 Python 将其传回并使用保存最近执行程序的退出代码的exit
变量在调用方获取它。$?
python3 your_program.py count=$?
虽然这种方法很简单,但我不推荐它,原因有二:
退出代码旨在传达错误,而不是正常数据。
如果有一天你想用
set -e
(terminate-on-error) 来运行你的脚本,你就会有麻烦了。
使用标准输出
将你要返回的整数写到stdout,通过命令替换来获取,即
count=$(python3 your_program.py)
缺点:如果有一天您想要向您的程序添加额外的输出(例如,用于诊断),您必须将它写入 stderr,否则它会污染您的结果计数。
使用文件
让您的 Python 程序接受文件名,并将计数写入该文件:
python3 your_program.py count_file count=$(<countfile)
缺点:您必须关心正在创建的 count_files,例如,如果不再需要,请删除它们。
TA贡献1786条经验 获得超12个赞
stdout 的任何输出都可以捕获到 bash 变量中。常规print
将打印到标准输出
hello.py
print('hello')
狂欢
RESULT=`python3 hello.py` echo $RESULT # hello
TA贡献1804条经验 获得超7个赞
我认为你应该让你的 bash 脚本接受命令行参数。然后,在您的 python 脚本中,执行 subprocess.Popen(['your_bash_script', your_variable])。
TA贡献1951条经验 获得超3个赞
你可以使用if $1(第一个参数的值)并修改你的最后一行error.py你应该能够得到你想要的结果。
import subprocess as s
file = open("doubt.txt","r")
Counter = 0
# Reading from file
Content = file.read()
file.close()
CoList = Content.split("\n")
for i in CoList:
if i:
Counter += 1
#print("This is the number of lines in the file")
#print(Counter)
if Counter > 1:
print("There is some erroneous value. Please restart the scanner")
s.call(['notify-send', str(Counter), 'Alert!','There is some erroneous value. Please restart the scanner'])
if $1 > 1
then break
fi
你可以用大约 3 行来完成这一切,会简单得多:
import subprocess as s
with open ("doubt.txt","r") as f:
if len(f.readlines()) > 1:
s.call(['notify-send', Counter, 'Alert!','There is some erroneous value. Please restart the scanner'])
附言。with如果您不打算将上下文管理器与该函数一起使用open,请确保close在您的file对象上使用该方法。
添加回答
举报