远程运行时,Python脚本无法读取用户输入

时间:2016-02-05 15:02:48

标签: python python-2.7 ssh

我正在尝试远程执行remotehost中存在的简单python脚本userinfo.py。

以下是userinfo.py的源代码[使用Python 2.7.10]

#############
print "Userinfo :"
name=raw_input("Enter your name")
age=raw_input("Enter your age")
print "Name"+name+"\nAge"+age
#############

但远程运行时脚本运行异常。

[user@localhost]# ssh remotehost python /home/userinfo.py
  

Userinfo:

     

输入您的姓名输入您的年龄名称

     

年龄

     

[用户@本地]#

     

执行摘要::

执行期间,它不会打印任何内容,它会直接等待用户输入,我只需按Enter键就会显示输出,如上所示。

想知道为什么在使用raw_input时它没有按预期运行。

当值作为参数传递时,它可以正常工作。

  

[user @ localhost] #ssh remotehost python userinfo.py xyz 20

     

Userinfo:

     

姓名xyz

     

20岁

     

[用户@本地]#

下面是更改的代码。

###########
import sys
print "Userinfo :"
name=sys.argv[1]
age=sys.argv[2]
print "Name "+name+"\nAge "+age
############

想知道为什么交互式方式无法正常工作以及可能解决的问题。

1 个答案:

答案 0 :(得分:0)

在常规终端中,立即刷新raw_input提示符,这意味着您将看到提示“输入您的姓名”。

如果你通过ssh运行这个脚本,它会保存输出直到它完成的脚本,然后只打印缓冲区中的所有内容。

你需要的是运行python unbuffered,这将强制stdout在每次输出后刷新,从而显示到你的ssh会话。这可以通过多种方式实现。

  data2set.shift(); // remove 1st item
  setRange.setValues(data2set);

或通过在.py脚本的顶部添加以下内容使文件可执行无缓冲。请务必在此处使用您的实际python路径:

ssh user@remotehost python -u script.py

然后使其成为可执行文件

#! /usr/bin/python - u

然后

sudo chmod +x script.py
相关问题