2016-02-05 63 views
0

我想遠程執行遠程主機中存在的簡單python腳本userinfo.py。Python腳本無法在遠程運行時讀取用戶輸入

下面是[使用Python 2.7.10]

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

但當遠程運行腳本工作異常userinfo.py的源代碼。

[[email protected]]# ssh remotehost python /home/userinfo.py 

USERINFO:

輸入您nameEnter您ageName

年齡

[用戶@本地]#

執行摘要::

在執行期間,它不會打印任何東西,它直接等待用戶輸入,而我只是按下Enter鍵,它將顯示如上所示的輸出。

想知道爲什麼在使用raw_input時它不像預期那樣工作。

當值作爲參數傳遞時,它工作正常。

[用戶@本地]#SSH遠程主機蟒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

代碼標籤的人...碼標籤! – gsamaras

+0

你可以自己編輯。 – tripleee

+0

你不會碰巧從你沒有向我們展示的循環中運行'ssh'命令,對嗎?另一件要調查的是你的SSH配置。事實上,這是不可重複的,無論如何,顯然與您的Python代碼無關。 – tripleee

回答

0

在常規終端中,raw_input提示立即刷新,這意味着您將看到提示「輸入您的姓名」。

如果你通過ssh運行這個腳本,它會保存輸出,直到腳本完成,然後只打印緩衝區中的所有內容。

你需要的是運行python unbuffered,這將強制stdout在每次輸出後刷新,從而顯示到你的ssh會話。這可以通過幾種方式完成。

ssh [email protected] python -u script.py 

或使文件的可執行無緩衝通過添加以下到您的.py腳本的頂部。一定要在這裏用你的實際的Python路徑:

#! /usr/bin/python - u 

,然後使其可執行

sudo chmod +x script.py 

然後

ssh [email protected] ./script.py 
+0

問題是:編寫提示後''raw_input()'刷新緩衝區 –

+0

非常好的一點。我更新澄清。緩衝不會發生,如果他ssh'd然後調用python,但它會在同一行中調用。 – Chris