【问题标题】:How to prompt user to enter path to a remote server in python?如何提示用户在 python 中输入远程服务器的路径?
【发布时间】:2015-10-30 09:14:57
【问题描述】:

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

问题:函数 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!")

类似的问题是1,2,3,4,但我找不到任何满足我用例的相关问题。有什么建议可以解决这个问题吗?

【问题讨论】:

  • 这是在 Linux、Windows 还是其他平台上?
  • 这是一个实际相关的问题 - stackoverflow.com/questions/14392432/…
  • @Paul 远程服务器在 CentOS 上,主机在 Windows 7 Professional 上
  • 远程计算机的名称和文件名不足以打开文件。涉及更多的复杂性。例如,URL http://some.host.com/path/to/file.html 只允许访问远程 Web 服务器可访问的文件,而不是任意文件。 Linux 的open 仅在本地打开文件,其中可以包括由系统管理员编辑的 NFS 或 SAMBA 远程文件系统mount,但同样不能在任意系统上打开任意文件。 open() 不打开 URL、FTP 站点、SCP 或其他访问远程文件的方式。
  • @Paul,感谢您的回复。我想要的只是远程服务器提示文件位置。执行起来真的有那么难吗?任何预定义的包怎么样?或者您是否建议在程序中硬编码位于远程服务器上的文件的路径是唯一的解决方案?

标签: python shell remote-server


【解决方案1】:

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

  • 根据您上面的描述,您似乎可以通过 ssh 访问 远程系统?在这种情况下,Paramiko 可用于通过 ssh 连接 并执行远程命令
  • 如果远程主机文件通过 HTTP 在网站上发布,您可以 通过 URL 验证它,但要注意这可能不会反映远程主机 完整路径,因为它依赖于 HTTP 根目录。

所以这真的取决于你的情况。

如果使用 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!"

【讨论】:

  • 感谢您的回答。让我看看 Paramiko,如果它适合我​​,我会回复。
  • 现在我会坚持之前给出的使用 raw_input 的建议,因为我不想让它复杂化。原因是我必须在服务器上安装这个库,这是一项我宁愿不做的危险任务。我要感谢您煞费苦心地以如此精心的方式发布您的答案。
  • 这是对我们都认为被问到的问题的一个很好的答案。点赞,并鼓励其他人这样做。
  • 谢谢大家。是的@Ashish。我看到你这样做了.. 是 selllikesybok 鼓励了另一个投票。 :-) 谢谢selllikesybok。
【解决方案2】:

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

OP 尝试了raw_input,但出现未指定的错误。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多