Python 하위 프로세스 출력은 systemd에 의해 두 번 기록됩니다.

Python 하위 프로세스 출력은 systemd에 의해 두 번 기록됩니다.

내 응용 프로그램에는 다음 코드가 있습니다.

def ifdown(iface):
    rc = subprocess.run(['/sbin/ifdown', iface]).returncode
    if rc:
        print(f'ifdown({iface}) returned {rc}')
        return False
    return True

응용 프로그램은 시스템 서비스로 실행됩니다. 문제는 함수를 호출할 때 하위 프로세스 출력이 두 배가 된다는 것입니다 journalctl -e -u <my_service>.

May 10 13:42:25 evolve-4 dhclient[6319]: Killed old client process
May 10 13:42:25 evolve-4 python[1134]: Killed old client process
May 10 13:42:26 evolve-4 dhclient[6319]: Internet Systems Consortium DHCP Client 4.4.1
May 10 13:42:26 evolve-4 python[1134]: Internet Systems Consortium DHCP Client 4.4.1
May 10 13:42:26 evolve-4 python[1134]: Copyright 2004-2018 Internet Systems Consortium.
May 10 13:42:26 evolve-4 python[1134]: All rights reserved.
May 10 13:42:26 evolve-4 python[1134]: For info, please visit https://www.isc.org/software/dhcp/
May 10 13:42:26 evolve-4 dhclient[6319]: Copyright 2004-2018 Internet Systems Consortium.
May 10 13:42:26 evolve-4 python[1134]: Listening on LPF/wwan0/ee:bc:6c:be:6d:7c
May 10 13:42:26 evolve-4 python[1134]: Sending on   LPF/wwan0/ee:bc:6c:be:6d:7c
May 10 13:42:26 evolve-4 python[1134]: Sending on   Socket/fallback
May 10 13:42:26 evolve-4 dhclient[6319]: All rights reserved.
May 10 13:42:26 evolve-4 dhclient[6319]: For info, please visit https://www.isc.org/software/dhcp/
May 10 13:42:26 evolve-4 dhclient[6319]: 
May 10 13:42:26 evolve-4 python[1134]: DHCPRELEASE of 100.68.214.247 on wwan0 to 100.68.214.248 port 67
May 10 13:42:26 evolve-4 dhclient[6319]: Listening on LPF/wwan0/ee:bc:6c:be:6d:7c
May 10 13:42:26 evolve-4 dhclient[6319]: Sending on   LPF/wwan0/ee:bc:6c:be:6d:7c
May 10 13:42:26 evolve-4 dhclient[6319]: Sending on   Socket/fallback
May 10 13:42:26 evolve-4 dhclient[6319]: DHCPRELEASE of 100.68.214.247 on wwan0 to 100.68.214.248 port 67

답변1

나는 이것이 파이썬 특정 문제라고 생각하지 않습니다. 내 생각에 dhclient는 터미널에서 실행하는 것처럼 syslog와 stderr(또는 stdout) 모두에 로그를 기록한다고 생각합니다.

즉, stdout/stderr 을 ifdown리디렉션 하면 /dev/null출력이 두 배가 되지 않습니다. 물론 이것이 귀하의 특정 상황에 가장 적합한 솔루션인지는 모르겠습니다.

관련 정보