2016-03-18 2 views
1

Мне нужно написать простой скрипт python (python3) для хранения моего локального адреса Ip в переменной, чтобы потом манипулировать им, я много читаю, но я не понимаю, где я делаю неправильно здесь кусок код для лучшего понимания ..Как сохранить вывод из команды bash?

#!/usr/bin/env pyhton3 
import os 
import subprocess 
import sys 
import fileinput 
localip = subprocess.call(["ifconfig | grep 'inet addr' | cut -d ':' -f2 | grep 'Bcast' | cut -d ' ' -f1"], shell=True) 
print localip 
... 
... 
... 

теперь, когда я это он Выполнение выражений выводит меня это:

[email protected]:~/Documents $ python change.py 
192.168.1.6 
0 

кажется, я не могу найти решение этой проблемы самостоятельно, может кто-нибудь сказать мне, где я поступаю неправильно и помогаю? Благодарю.

+0

Как объяснено в [документация] (https://docs.python.org/2/library/subprocess.html#subprocess.call), значение, возвращенное 'subprocess.call' является возвращение командования код, который используется для указания того, была ли команда выполнена. В этом случае оно равно нулю, поскольку ошибки не было. – kindall

+0

Не выходите в оболочку, чтобы получить информацию о вашем сетевом интерфейсе. Я не знаю, является ли это каноническим решением, но для поиска https://pypi.python.org/pypi/netifaces/ потребовалось всего 10 секунд –

ответ

1

В python2, вы могли бы сделать:

stdout = subprocess.check_output(args, shell=true) 

В Python3, вы также можете сделать:

completed_process = subprocess.run(args, shell=True) 
stdout = completed_process.stdout 

Что может быть более полезным интерфейс

2

Для решения вашей XY Problem, почему бы просто не использовать Python для получения вашего IP/hostname?

>>> import socket 
>>> socket.gethostname() 
'MY-COMPUTER' 
>>> socket.gethostbyname(socket.gethostname()) 
'192.168.1.126' 
>>> socket.getfqdn() 
'my-computer.local' 
>>> socket.gethostbyname(socket.getfqdn()) 
'192.168.1.126' 
Смежные вопросы