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/, вероятно, облегчит вашу жизнь.

Другие вопросы по тегам