如何解决使用 pexpect 将脚本进程发送到后台
我正在尝试编写脚本以更轻松地连接到 VPN。我希望脚本使用用户输入并通过 openvpn 连接到 vpn 端点,打印用户的进程 ID,然后继续在后台运行但将用户返回到 shell。我尝试了 child.close(force=False)
、os.fork()
和其他一些东西,但没有任何运气。我正在使用的代码如下。非常感谢任何建议!
import getpass
import os
import pexpect
import random
import subprocess
import sys
country = sys.argv[1] if len(sys.argv) > 1 else 'US'
print('Connecting to VPN through ' + country)
vpns=subprocess.run(['ls','/etc/openvpn/'],capture_output=True).stdout.decode().split('\n')
matching_vpns=filter(lambda vpn: vpn[:2].lower() == country.lower(),vpns)
chosen_vpn = random.choice(list(matching_vpns))
print('Connecting to ' + chosen_vpn + '\n')
child = pexpect.spawnu('sudo openvpn /etc/openvpn/'+chosen_vpn)
child.expect('Enter Auth Username:')
username = input('Enter Auth Username: ')
child.sendline(username)
child.expect('Enter Auth Password:')
password = getpass.getpass('Enter Auth Password: ')
child.sendline(password)
child.logfile_read = sys.stdout
while True:
try:
child.expect('\n',timeout=None)
if 'Initialization Sequence Completed' in child.before:
print("\nSuccessfully connected to " + chosen_vpn)
print("To stop VPN,run 'sudo pkill -9 -P " + str(child.pid) + "'")
break
except pexpect.EOF:
break
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。