Python - как получить данные из командной строки и передать их в socket.gethostbyaddr("")
Я искал в интернете в поисках ответа на этот вопрос. Пожалуйста, не мои навыки программирования на Python не так уж велики. Я пытаюсь создать сценарий командной строки, который будет принимать входные данные из командной строки следующим образом:
$python GetHostID.py serverName.com
последняя часть - это то, что я хочу передать как переменную в модуль socket.gethostbyaddr(""). это код, который у меня есть до сих пор. Может кто-нибудь помочь мне понять, как поместить эту переменную в (""). Я думаю, что "" создает проблемы с использованием простого имени переменной, поскольку он пытается рассматривать его как строку текста, как приложение к имени переменной. вот код, который у меня есть в моем скрипте:
#!/bin/python
#
import sys, os
import optparse
import socket
remoteServer = input("Enter a remote host to scan: ")
remoteServerIP = socket.gethostbyaddr(remoteServer)
socket.gethostbyaddr('remoteServer')[0]
os.getenv('remoteServer')
print (remoteServerIP)
Любая помощь приветствуется. Я ломал голову над этим... спасибо
4 ответа
Аргументы командной строки доступны в виде списка sys.argv
, чей первый элемент - путь к программе. Существует ряд библиотек, которые вы можете использовать (argparse, optparse и т. Д.) Для анализа командной строки, но для вашего простого приложения вы можете сделать что-то вроде этого:
import sys
import sys, os
import optparse
import socket
remoteServer = sys.argv[1]
remoteServerIP = socket.gethostbyaddr(remoteServer)
print (remoteServerIP)
Запуск этой программы из командной строки
$ python GetHostID.py holdenweb.com
дает вывод
('web105.webfaction.com', [], ['108.59.9.144'])
Вы можете использовать sys.argv
за
$python GetHostID.py serverName.com
sys.argv
было бы
['GetHostID.py', 'serverName.com']
но за дружелюбие к пользователю взгляните на argparse Tutorial
os.getenv('remoteserver') не использует переменную remoteserver в качестве аргумента. Вместо этого он использует строку "remoteserver".
Кроме того, вы пытаетесь принять ввод в качестве аргумента командной строки? Или вы пытаетесь принять это как пользовательский ввод? Ваше описание проблемы и реализация отличаются здесь. Самый простой способ - запустить скрипт
python GetHostID.py
а потом в свой код включите
remoteServer = raw_input().strip().split()
чтобы получить вход, который вы хотите для удаленного сервера.
В Python 2 input
читает текст и оценивает его как выражение Python в текущем контексте. Это почти никогда не то, что вы хотите; ты хочешь raw_input
вместо. Тем не менее, в Python 3, input
делает то, что raw_input
сделал в версии 2, и raw_input
не доступен.
Итак, если вам нужен ваш код для работы как в Python 2, так и в 3, вы должны сделать что-то вроде этого после блока импорта:
# Apply Python 3 semantics to input() if running under v2.
try:
input = raw_input
def raw_input(*a, **k):
raise NameError('use input()')
except NameError:
pass
Это не имеет никакого эффекта в Python 3, но в v2 это заменяет запас input
с raw_input
, а также raw_input
с функцией, которая всегда выдает исключение (поэтому вы заметите, если вы случайно используете raw_input
).
Если вам нужно сгладить множество различий между v2 и v3, библиотека http://python-future.org/, вероятно, облегчит вашу жизнь.