gpt4 book ai didi

python - 从python发送变量到bash

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:55 26 4
gpt4 key购买 nike

我已尽最大努力进行研究,并且已经到了使用 subprocess 和 subprocess.call 来帮助我将 python 变量发送到 bash 的地步。我设法从 bash 输出中获取了我的 python 变量,但现在我需要这些变量同步。我环顾四周无法学习如何有效地使用 subprocess.call。我一直在使用 subprocess.check_output 来完美地将 bash 输出获取到 python 变量中。我无法理解 subprocess.call 如何接受参数以及如何正确使用它。我尝试遵循我认为正确的格式。这是我的代码。 P.S 我是加入这个论坛的新手,尽管多年来我一直在使用它来获取大量有用的信息。我不知道如何格式化我的代码输入,使其看起来像我在这里看到的那样。无论如何,当我尝试“代码”、“ block 引用”等按钮时,我确定你能原谅我。

###BEGINING OF CODE###
#! /usr/bin/env python2
import os,time,subprocess

#GRAB DATA
os.system('ifconfig > /tmp/ifconfig.txt;clear;cat /tmp/ifconfig.txt|grep "wlan"|cut -c 1-5 > /tmp/dev.lst;clear;')

#SET allwlan
allwlan=subprocess.check_output("cat /tmp/dev.lst", shell=True)

#SET max_index VARIABLE
max_index=subprocess.check_output("wc -l < /tmp/dev.lst", shell=True)

#SET curwlan WLAN LINE
#os.system(echo 2 > /tmp/curline.lst)

#STRIP DATA FOR curwlan
subprocess.call(['head', '-2', '/tmp/dev.lst', stdout=subprocess.PIPE, shell=True'])
#NEED#HELP#HERE# subprocess.call(['tail', '-1', > /tmp/curwlan.lst;')

#SET curwlan VARIABLE
curwlan=subprocess.check_output("cat /tmp/curwlan.lst", shell=True)

##STRIP EXCESS CHARACTERS/EMPTY LINES FROM VARIABLES##
curwlan=str(curwlan)
splitted=curwlan.split()
curwlan=splitted[0]
allwlan=allwlan[:-1]
splitted=max_index.split()
max_ index=splitted[0]
max_index=int(max_index)

##DEBUG MODE
print("Welcome, ")
print(" to debug mode. wireless adapter decting algorithm")
print
print("ALLWLAN:")
print(allwlan)
print
print("CURWLAN:")
print(curwlan)
print
print("MAX_INDEX:")
print(max_index)
print
input("PRESS ENTER TO EXIT")
####END OF CODE####*

我的代码中的错误在 #STRIP 数据用于 curwlan

这是我添加 subprocess.call 命令之前的输出。

Welcome, 
to debug mode. wireless adapter decting algorithm

ALLWLAN:
wlan0
wlan3

CURWLAN:
wlan2

MAX_INDEX:
2

PRESS ENTER TO EXIT

我很想学习如何让我的 python 和 bash 部分一起传递它们的变量,我知道我在 subprocess.call 方面走在正确的轨道上,我已经苦苦挣扎了几天。我正在尝试制作自己的算法来检测我的无线网卡,并能够使用每一个(可能有多少或不管它们被命名为什么)作为我的变量由于我不断更改无线网卡名称,现在正在苦苦挣扎的旧脚本。在此先感谢我不明白我要求 subprocess.call 做的事情是否不切实际。

最佳答案

您将希望尽可能避免外部进程。您所做的大部分工作仅用 Python 即可轻松完成,如果以 native 方式实现,将会更加紧凑和高效。

此外,您将过时的 os.system()subprocess 混合在一起,后者通常是首选,正如 os 中所指出的.system() 文档。

subprocess.call() 只有在您不希望命令有任何输出时才真正合适。您尝试使用它的实例 subprocess.check_output() 将是正确的使用调用。但是,在您(据我了解,不必要地)运行 shell 命令并输出到临时文件的地方,您可以简单地使用 subprocess.call()

您需要了解何时何地 shell 是有用和必要的。如果没有 shell,许多有 shell=True 的地方会更安全、更快、更简单、更直接。你只运行一个没有重定向或通配的简单硬编码命令,从 subprocess.whatever('command with args', shell=True) 切换到 subprocess.whatever(['command ', 'with', 'args']) 将立即减少您的时间和内存占用,而不会产生不良影响。如果您需要重定向、管道或 globbing,也许您需要 shell=True;但在很多情况下,用 Python 做这些事情会简单明了。例如,下面是 head 命令可以在没有 shell 的情况下编写的方式:

with open('/tmp/randomfile', 'w') as outputfile:
subprocess.call(['head', '-n', '2', '/tmp/dev.lst'], stdout=outputfile)

无论如何,在解决了这些问题之后,以下是我将如何做(我认为)您正在尝试的事情:

#!/usr/bin/env python2

import subprocess

allwlan = []
ifconfig = subprocess.check_output(['ifconfig'])
for line in ifconfig.split('\n'):
if "wlan" in line:
allwlan.append(line[0:5].strip())

max_index=len(allwlan)
curwlan=allwlan[1]

这是匆忙拼凑起来的,但我相信我至少捕捉到了你当前的椒盐卷饼逻辑代码所做的大部分事情;尽管我假设将随机输出文件散布到 /tmp 文件系统并不是您脚本的基本功能。

关于python - 从python发送变量到bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35122375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com