为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2023-04-25 17:21:56
我有多个需要顺序执行的 python 代码。我是通过使用 abash 脚本来完成的。#! /bin/shclearecho "Test 1: Database Comparison"python3 databasecomparison.pypython3 error.pyecho "Test 2: Conflicting ARFCNs"python3 conflictingARFCNs.pyecho "Test 3: Conflicting Cell IDs"python3 conflictingCID.pyecho "Test 4: Lonesome Location ID"python3 conflictingLAC.pyecho "Test 5: Empty Neighbour List"python3 neighbour.pyecho "Test 6: Missing IMSI"python3 IMSI.pyecho "The tests are complete!"notify-send "COMPLETED!"现在,我的 error.py python 代码是#!/usr/bin/env python3import subprocess as sfile = 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 > 1then breakfi但是,我无法传递变量 Counter。我在 stackoverflow 上查找了现有的解决方案,但说实话,我一直无法理解其中的任何一个。请帮忙。
查看完整描述

4 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

在您的情况下,您想将一个小整数传递给调用程序。基本上,你有三种可能性,都有缺点或优点。

  1. 使用退出代码

如果整数始终为非负且小于 256,您可以通过 Python 将其传回并使用保存最近执行程序的退出代码的exit变量在调用方获取它。$?

python3 your_program.py
count=$?

虽然这种方法很简单,但我不推荐它,原因有二:

  • 退出代码旨在传达错误,而不是正常数据。

  • 如果有一天你想用set -e(terminate-on-error) 来运行你的脚本,你就会有麻烦了。

  1. 使用标准输出

将你要返回的整数写到stdout,通过命令替换来获取,即

count=$(python3 your_program.py)

缺点:如果有一天您想要向您的程序添加额外的输出(例如,用于诊断),您必须将它写入 stderr,否则它会污染您的结果计数。

  1. 使用文件

让您的 Python 程序接受文件名,并将计数写入该文件:

python3 your_program.py count_file
count=$(<countfile)

缺点:您必须关心正在创建的 count_files,例如,如果不再需要,请删除它们。


查看完整回答
反对 回复 2023-04-25
?
开满天机

TA贡献1786条经验 获得超12个赞

stdout 的任何输出都可以捕获到 bash 变量中。常规print将打印到标准输出

hello.py

print('hello')

狂欢

RESULT=`python3 hello.py`
echo $RESULT  # hello


查看完整回答
反对 回复 2023-04-25
?
三国纷争

TA贡献1804条经验 获得超7个赞

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



查看完整回答
反对 回复 2023-04-25
?
饮歌长啸

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对象上使用该方法。


查看完整回答
反对 回复 2023-04-25
  • 4 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信