我想用python自动化一个特定的任务。
这个任务包括,与ssh连接到远程服务器,并运行一个特定的程序(称之为prog.out),该程序可能要求或不要求用户输入
考虑到我的研究结果可能是错误的。在
让我们从prog.out不请求任何输入的简单可能性开始,而只是将一些信息打印到控制台:int main(int argc, char* argv[]) {
printf("Hey there, fella\n");
printf("How are you this morning?\n");
printf("See ya...\n");
return 0;
}
它编译为:prog.out,位于服务器名上,等待执行。
所以在这种情况下:
^{pr2}$
将非常好地工作,并且将打印出prog.out生成的任何内容。
但如果prog.out是:int main(int argc, char* argv[]) {
printf("Hey there, fella\n");
printf("How are you this morning?\n");
printf("please enter an integer...\n");
int a;
scanf("%d", &a);
printf("you entered %d\n", a);
printf("see ya...\n");
return 0;
}
然后上面的python代码将在sout.readlines()(等待eof?)阻塞。。。
避免在sout.readlines()中阻塞的方法是通过写入其stdin管道向prog.out提供输入:client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("server_name")
sin, sout, serr = client.exec_command('./prog.out')
sin.write('55\n')
for line in sout.readlines():
print(line, end = '')
但我不知道prog.out是否需要用户输入…
我正在寻找一种健壮的方法来运行prog.out,并允许用户根据需要与它进行长时间的交互。
在prog.out需要输入时有什么指示吗?在
编辑
好的,我做了一些实验,发现只要prog.out没有退出,任何从通道read()的尝试都会被阻止,但是只要没有输入,prog.out就不能退出…
为什么我无法读取prog.out已经发送的字节,即使它还没有完成?
我真的很想模拟用户,就像他或她直接与prog.out交互一样。。。在