有没有一种方法可以从另一个python脚本创建的列表中导入变量?

时间:2019-07-26 19:07:35

标签: python-3.x subprocess popen

我正在通过FTP将文件推送到相机。我想在脚本中输入ip,然后创建一个列表,然后为输入的每个ip打开一个新的cmd提示符,并执行指定的命令以成功同时将文件推送到多个ip(每个命令都在自己的cmd提示符下) )

如果我以独立方式运行推送脚本,则该脚本可以正常工作。我可以获取主要文件以将ips收集到一个列表中,然后一次打开它们以将配置单独推送到每个摄像机(这样它最终将一次完成所有ips 1)。我尝试设置一个python脚本,该脚本调用Windows批处理文件,然后调用该脚本运行,但是由于无法从主文件中读取列表,因此我无法使其正常工作。我也尝试过像将模块一样将f1导入到固件中,但是它将整个文件拖入其中,这只会创建更多的cmd提示,并继续不做任何事情,而是弹出窗口

f1.py

import subprocess, os

xlist = []
while True:
 x = str(input('What Ips Are We Upgrading? '))
 if x == "":
  break
 elif x not in xlist:
  xlist.append(x)

alist = xlist

for ip in alist:
 subprocess.Popen("start cmd /K Firmware.py ", shell=True)

Firmware.py

import time
import keyboard



keyboard.write("ftp " + ip)
time.sleep(3)
keyboard.press_and_release('enter')
time.sleep(3)
keyboard.write("root")
time.sleep(3)
keyboard.press_and_release('enter')
keyboard.write("pass")
time.sleep(3)
keyboard.press_and_release('enter')
keyboard.write("bin")
time.sleep(3)
keyboard.press_and_release('enter')
keyboard.write("hash")
time.sleep(3)
keyboard.press_and_release('enter')
keyboard.write("put 1.bin flash")
time.sleep(3)
keyboard.press_and_release('enter')

我希望它为每个输入打开1 cmd提示符,并执行Firmware.py中的步骤 但是,我不断收到未定义“ ip”的错误(来自Firmware.py),或者它会遍历列表,但一次只能访问一个ip,然后在完成时将重复另一个(但一次只能访问一个)。

1 个答案:

答案 0 :(得分:0)

要将IP地址传递给第二个脚本,应将其添加到firmware.py脚本的命令行中。然后,您可以通过sys.argv访问它。

for ip in alist:
    subprocess.Popen(['python3', 'Firmware.py', str(ip)])

然后在Firmware.py中,IP地址应该在sys.argv[1]中。

如果要使用FTP,为什么不使用ftplib module?这可能比启动一个单独的脚本与FTP程序进行通信要容易得多。

from ftplib import FTP

# Create FTP instance and log in
ftp = FTP(host=ip, user='root', passwd='pass')
ftp.transfercmd('put 1.bin flash')
# or maybe ftp.storbinary? Haven't used manual FTP in years...

最后,FTP传输的速度将受限于相机网络的带宽。因此,我不确定是否值得同时启动多个进程。无论如何,如果您想这样做,concurrent.futures模块可能会有所帮助。