mirror of
https://github.com/systemd/systemd.git
synced 2024-11-27 12:13:33 +08:00
7e5e604393
The current pattern '#' triggers on the openSUSE kernel version that is printed early during boot when no actual prompt is ready > [ 0.000000] Linux version 5.12.10-1-default (geeko@buildhost) (gcc (SUSE Linux) 11.1.1 20210510 [revision 23855a176609fe8dda6abaf2b21846b4517966eb], GNU ld (GNU Binutils; openSUSE Tumbleweed) 2.36.1.20210326-4) #1 SMP Fri Jun 11 05:05:06 UTC 2021 (b92eaf7) Instead wait for pattern that: a) should have fewer false positives, b) still be with working on distro shells: openSUSE (red color) ^[[1m^[[31mimage:~ #^[[m^O arch [root@image ~]# debian root@image:~# ubuntu root@image:~# fedora [root@image ~]#
27 lines
492 B
Python
Executable File
27 lines
492 B
Python
Executable File
#!/usr/bin/env python3
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
import pexpect
|
|
import re
|
|
import sys
|
|
|
|
|
|
def run() -> None:
|
|
p = pexpect.spawnu(" ".join(sys.argv[1:]), logfile=sys.stdout, timeout=300)
|
|
|
|
# distro-independent root prompt
|
|
p.expect(re.compile("~[^#]{0,3}#"))
|
|
p.sendline("systemctl poweroff")
|
|
|
|
p.expect(pexpect.EOF)
|
|
|
|
|
|
try:
|
|
run()
|
|
except pexpect.EOF:
|
|
print("UNEXPECTED EOF")
|
|
sys.exit(1)
|
|
except pexpect.TIMEOUT:
|
|
print("TIMED OUT")
|
|
sys.exit(1)
|