Вы вообще не хотите использовать subprocess
для этого.
Что на самом деле делает эта команда? Он использует расширение bash для открытия сетевого сокета, передает его через cat (1), чтобы перенаправить его на стандартный вывод, и решает запустить cat от имени пользователя root. Вам действительно не нужно расширение bash, или /bin/cat
, или привилегии root, чтобы делать все это в Python; Вы ищете библиотеку socket .
Вот эквивалент всего Python:
#!/usr/bin/env python3
import socket
s = socket.create_connection(('time.nist.gov', 13))
try:
print(s.recv(4096))
finally:
s.close()
(Обратите внимание, что все мои эксперименты показывают, что это соединение работает, но дневной сервер отвечает, немедленно закрываясь. Например, более простой вызов оболочки nc time.nist.gov 13
также возвращает пустую строку.)