如何提示用户在python中输入远程服务器的路径?

时间:2015-08-07 03:02:38

标签: python shell remote-server

使用案例:远程服务器上有某个文件。我不希望在程序中硬编码该文件的路径,而是希望程序提示我指定远程服务器上该目录的路径。这将有助于程序的可移植性。我可以在pyCharm 4.5专业版中连接到远程服务器。使用SFTP连接到pyCharm中的远程服务器。至少目前,密码或密钥文件不是一个需要关注的问题。

问题:函数raw_input()适用于本地解释器。但是,我使用什么方法来提示用户输入位于远程服务器中的文件的目录路径?

目前我正在编写程序中的文件路径,如

input_file="/home/ashish/PyCharm_proj/raw_data/all_user_and_tweets_only_raw.csv"

我还尝试了以下代码,当在远程服务器上执行时,该代码当然不起作用

import os,sys
user_input = raw_input("Enter the path of your file (use \: ")
assert os.path.exists(user_input), "I did not find the file at,  "+str(user_input)
input_file = open(user_input,'r+')
print("Hooray we found your file!")

类似的问题包括1234,但我找不到任何符合我用例的相关问题。有什么建议可以解决吗?

2 个答案:

答案 0 :(得分:2)

要验证远程主机/服务器上是否存在该文件,您需要一种连接到该主机的方法。根据您的具体情况,有许多不同的方式。

  • 从上面的描述中看起来你有ssh访问权限 远程系统?在这种情况下,Paramiko可用于通过ssh进行连接 并执行远程命令
  • 如果远程主机文件是通过HTTP在网站上发布的,您可以 通过URL验证它,但要注意这可能不会反映远程主机 完整路径,因为它依赖于HTTP root。

所以这取决于你的情况。

如果使用paramiko,最简单的方法之一就是使用SFTP类。像这样:

ssh_client = paramiko.SSHClient()
ssh_client.connect(host, port, user, password)
sftp = ssh_client.open_sftp()
file_stat = sftp.stat(path)           # can use stat
try:
    sftp_obj1 = sftp.file(path)   # or use file
    sftp_obj2 = sftp.open(path)   # or use open
except:
    print "Error! File not found!"

答案 1 :(得分:1)

所以,这个问题起初有点不清楚。 OP最终正在寻找一种方法来为他的脚本提供有关远程服务器上文件位置(已知)的输入。

OP尝试raw_input,但收到了一个未指定的错误。

评论中的进一步讨论表明,原始方法对于此用例是正确的。错误发生在代码的无关部分,其中OP对输入字符串和文件对象使用相同的标识符,导致尝试open文件对象。