我正在尝试远程执行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
############
想知道为什么交互式方式无法正常工作以及可能解决的问题。
答案 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