使用案例:远程服务器上有某个文件。我不希望在程序中硬编码该文件的路径,而是希望程序提示我指定远程服务器上该目录的路径。这将有助于程序的可移植性。我可以在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!")
答案 0 :(得分:2)
要验证远程主机/服务器上是否存在该文件,您需要一种连接到该主机的方法。根据您的具体情况,有许多不同的方式。
所以这取决于你的情况。
如果使用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
文件对象。