(Python)在单独的窗口OS X(子进程)

时间:2017-07-21 18:13:18

标签: python macos shell networking

我在网络部门工作,正在尝试简化擦除和更新交换机的过程。目前的方法是使用Mac OSX计算机控制USB->串行适配器,并将命令复制并粘贴到交换机上。例如:

sudo cu -l /dev/cu.usbserial -s 9600
(password)
enable
conf t
...
copy tftp flash 192.168.1.2 FCX_8030h_boot.bin bootrom
...

我们经常需要更新大量的这些开关,复制/粘贴过程可能会花费大量时间。为了加快速度,我开始研究Python脚本以尝试自动化它,或者至少允许引导输入过程。

我坚持第一段代码:

import subprocess
...
subprocess.call("sudo cu -l /dev/cu.usbserial -s 9600", shell=True)

(注意:我知道shell = True的风险,但是这将在使用字符串文字而非用户输入的本地非联网机器上使用)

此命令有效...运行脚本会打开一个终端窗口,然后运行该命令。问题是我不能回到剧本;新进程接管了所有内容,我只是手动向交换机输入命令。

我尝试了Popen()而不是call(),但该行似乎根本没有做任何事情;相反,它使用标准错误代码退出脚本(没有可见的错误)。

最好我想在后台打开一个新的shell窗口,并让原始脚本能够将命令输入到该shell中,这样用户就可以获得有关该过程的反馈,但保持对脚本的控制。如果那是不可能的,我需要一种方法来回显交换机中的内容,而不会失去对脚本输入的访问权。

到目前为止,我已经研究过OPEN_NEW_CONSOLE,但显然这只适用于Windows系统(不幸的是Mac是我工作的唯一选择)。使用Popen打开新控制台窗口的命令,例如“cmd”或“xterm”似乎不适用于OSX,我没有找到替代方案(或者不知道具体要查找什么)。我看到的关于子进程的所有问题,包括官方文档,似乎都假设该过程将完成并返回一个值,但我需要继续进程,同时保留原始脚本的控制(最好是可见性)。

这可能吗?除了Python之外还有其他语言可以更好地用于此吗?提前感谢您的帮助,如果有更好的答案我会道歉,我不知道该去哪里看。

0 个答案:

没有答案