猿问

有没有办法将变量从 python 脚本传递到 bash 脚本?

我有多个需要顺序执行的 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 上查找了现有的解决方案,但说实话,我一直无法理解其中的任何一个。请帮忙。


30秒到达战场
浏览 125回答 4
4回答

繁星coding

在您的情况下,您想将一个小整数传递给调用程序。基本上,你有三种可能性,都有缺点或优点。使用退出代码如果整数始终为非负且小于 256,您可以通过 Python 将其传回并使用保存最近执行程序的退出代码的exit变量在调用方获取它。$?python3&nbsp;your_program.py count=$?虽然这种方法很简单,但我不推荐它,原因有二:退出代码旨在传达错误,而不是正常数据。如果有一天你想用set -e(terminate-on-error) 来运行你的脚本,你就会有麻烦了。使用标准输出将你要返回的整数写到stdout,通过命令替换来获取,即count=$(python3&nbsp;your_program.py)缺点:如果有一天您想要向您的程序添加额外的输出(例如,用于诊断),您必须将它写入 stderr,否则它会污染您的结果计数。使用文件让您的 Python 程序接受文件名,并将计数写入该文件:python3&nbsp;your_program.py&nbsp;count_file count=$(<countfile)缺点:您必须关心正在创建的 count_files,例如,如果不再需要,请删除它们。

开满天机

stdout 的任何输出都可以捕获到 bash 变量中。常规print将打印到标准输出hello.pyprint('hello')狂欢RESULT=`python3&nbsp;hello.py` echo&nbsp;$RESULT&nbsp;&nbsp;#&nbsp;hello

三国纷争

我认为你应该让你的 bash 脚本接受命令行参数。然后,在您的 python 脚本中,执行 subprocess.Popen(['your_bash_script', your_variable])。

饮歌长啸

你可以使用if $1(第一个参数的值)并修改你的最后一行error.py你应该能够得到你想要的结果。import subprocess as sfile = open("doubt.txt","r")&nbsp;Counter = 0&nbsp;&nbsp;# Reading from file&nbsp;Content = file.read()&nbsp;file.close()CoList = Content.split("\n")&nbsp;&nbsp;&nbsp;for i in CoList:&nbsp;&nbsp; &nbsp; if i:&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Counter += 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;#print("This is the number of lines in the file")&nbsp;#print(Counter)&nbsp;if Counter > 1:&nbsp; &nbsp; print("There is some erroneous value. Please restart the scanner")&nbsp; &nbsp; s.call(['notify-send', str(Counter), 'Alert!','There is some erroneous value. Please restart the scanner'])if $1 > 1then breakfi你可以用大约 3 行来完成这一切,会简单得多:import subprocess as swith open ("doubt.txt","r") as f:&nbsp; &nbsp; if len(f.readlines()) > 1:&nbsp; &nbsp; &nbsp; &nbsp; s.call(['notify-send', Counter, 'Alert!','There is some erroneous value. Please restart the scanner'])附言。with如果您不打算将上下文管理器与该函数一起使用open,请确保close在您的file对象上使用该方法。
随时随地看视频慕课网APP

相关分类

Python
我要回答