我有多个需要顺序执行的python代码。我已经通过使用abash脚本做到了这一点。
#! /bin/sh
clear
echo "Test 1: Database Comparison"
python3 databasecomparison.py
python3 error.py
echo "Test 2: Conflicting ARFCNs"
python3 conflictingARFCNs.py
echo "Test 3: Conflicting Cell IDs"
python3 conflictingCID.py
echo "Test 4: Lonesome Location ID"
python3 conflictingLAC.py
echo "Test 5: Empty Neighbour List"
python3 neighbour.py
echo "Test 6: Missing IMSI"
python3 IMSI.py
echo "The tests are complete!"
notify-send "COMPLETED!"
现在,我的error.py的python代码是
#!/usr/bin/env python3
import subprocess as s
file = open("doubt.txt","r")
Counter = 0
# Reading from file
Content = file.read()
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','Alert!','There is some erroneous value. Please restart the scanner'])
我想将变量Counter的值从python代码传递到bash脚本,以便我可以执行:
if Counter > 1
then break
fi
但是,我无法传递变量Counter。 我已经检查了关于stackoverflow的现有解决方案,但事实b告诉我,我一直无法理解其中的任何一个。请帮忙。
答案 0 :(得分:0)
任何来自stdout的输出都可以捕获到bash变量中。常规print
将打印到标准输出
hello.py
print('hello')
重击
RESULT=`python3 hello.py`
echo $RESULT # hello
答案 1 :(得分:0)
我认为您应该将bash脚本制作为带有命令行参数的脚本。然后,在您的python脚本中,执行一个subprocess.Popen([['your_bash_script',your_variable])。
答案 2 :(得分:0)
您可以使用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'])
PS。如果您不打算将上下文管理器with
与open
函数一起使用,请确保在close
对象上使用file
方法。
答案 3 :(得分:0)
在您的情况下,您想将一个小整数传递给调用程序。基本上,您有三种可能,都有缺点或优点。
假设整数始终为非负数且小于256,您可以通过Python exit
将其传递回去,并使用变量$?
在调用方将其取回,该变量保存了退出代码为最新执行的程序。
python3 your_program.py
count=$?
虽然此方法很简单,但由于两个原因,我不建议这样做:
set -e
(错误终止)运行脚本,则会遇到麻烦。写出要返回到stdout的整数,然后通过命令替换将其提取,即
count=$(python3 your_program.py)
缺点:如果您有一天想向程序中添加其他输出(例如,用于诊断),则必须将其写入stderr,否则会污染结果计数。
让您的Python程序接受文件名,并将其计数写入该文件:
python3 your_program.py count_file
count=$(<countfile)
缺点:您必须关心正在创建的count_files,例如,如果不再需要删除它们。