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

#!/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
...
...
...

Теперь, когда я его исключаю, он печатает мне это:

pi@raspberrypi:~/Documents $ python change.py
192.168.1.6
0

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

1
FabioEnne 18 Мар 2016 в 19:54
Как объясняется в документации, значение, возвращаемое subprocess.call - это код возврата команды, который используется, чтобы указать, успешно ли выполнена команда. В этом случае он равен нулю, потому что ошибки не было.
 – 
kindall
18 Мар 2016 в 20:00
Не заходите в оболочку, чтобы получить информацию о вашем сетевом интерфейсе. Я не знаю, является ли это каноническим решением, но потребовалось всего 10 секунд, чтобы найти pypi. python.org/pypi/netifaces
 – 
William Pursell
18 Мар 2016 в 20:08

2 ответа

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

>>> 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'
2
Community 20 Мар 2017 в 13:29

В python2 вы бы сделали:

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

В python3 вы также можете:

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

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

1
SpoonMeiser 18 Мар 2016 в 20:01