【发布时间】:2016-11-01 01:54:03
【问题描述】:
我想使用 subprocess 模块来控制一些通过 ssh 生成的进程。
通过搜索和测试,我发现这是可行的:
import subprocess
import os
import time
node = 'guest@localhost'
my_cmd = ['sleep','1000']
devnull = open(os.devnull, 'wb')
cmd = ['ssh', '-t', '-t', node] + my_cmd
p = subprocess.Popen(cmd, stderr=devnull, stdout=devnull)
while True:
time.sleep(1)
print 'Normal output'
我提供的 -t -t 选项允许我终止远程进程,而不仅仅是 ssh 命令。但这也会扰乱我的程序输出,因为换行符不再有效,使其成为一个又长又难以阅读的字符串。
如何让ssh不影响python程序的格式化?
示例输出:
guest:~$ python2 test.py
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
(First ctrl-c)
Normal output
Normal output
Normal output
(Second ctrl-c)
^CTraceback (most recent call last):
File "test.py", line 13, in <module>
time.sleep(1)
KeyboardInterrupt
【问题讨论】:
-
你能提供样本输出吗?目前还不清楚你所说的“加扰”是什么意思。
-
stackoverflow 将对齐所有内容。换行后输出不会与终端的开头对齐。消息打印正确。
-
如果我 ctrl-c 并返回我的终端,按 enter 命令行不是在新行中打印,而是在我的上一行旁边打印。与 ssh 中的 -t -t 选项有关。
-
@SuperBiasedMan 提供了一些带有编辑的输出。
-
Tthe -t -t 选项强制 ssh 在对等方上使用 pty。这意味着您可以获得终端控制字符。但是你的 又长又难读的字符串 是从哪里来的呢?您是否在 Python 变量中捕获它?
标签: python python-2.7 ssh subprocess