gpt4 book ai didi

python - 让python3程序多次按 "enter"

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:31 26 4
gpt4 key购买 nike

我在我的公司使用 OpenVPN 并尝试自动化用户创建过程。我现在面临的证书生成步骤有问题。当尝试为用户构建 key 时(所有参数都是预定义的)程序必须多次按 Enter,最后按“y”和“Enter”2 次。我尝试使用 Popen 和 PIPE,但到目前为止运气不好。将不胜感激。

import sys, os
from subprocess import Popen, PIPE
# Generate an .ovpn file

try:
username = sys.argv[1]
except:
print "Error. Supply a username!"
sys.exit()

print("Adding user")
os.system("useradd" + " -m" + " -s" + " /bin/bash" + username)
print("Sourcing vars")
os.system('source + /home/myuser/openvpn-ca/vars')
enter = Popen(['/home/myuser/openvpn-ca/build-key {}'.format(username)]),
stdin=PIPE, shell=True)
enter.communicate(input='\n')

编辑:

这与标记为 [duplicate] 的内容不同。原因如下:

我不需要生成自定义证书,更改任何值等。只需按多次“Enter”并输入“yes”和“Enter”2 次即可。

最佳答案

您不能从 Python source shell 脚本;或者更确切地说,你可以,但它只会启动一个新的子进程,它 sources 一些东西然后消失,而不会改变你的 Python 环境或后续子进程中的任何东西。

尝试这样的事情:

import sys
import logging # to get diagnostics on standard error instead
import subprocess

# Maybe switch to level=logging.WARNING once you are confident this works
logging.basicConfig(level=logging.INFO, format='%(module)s:%(asctime)s:%(message)s')

try:
username = sys.argv[1]
except:
logging.error("Error. Supply a username!")
sys.exit()

logging.info("Adding user")
subprocess.run(["useradd", "-m", "-s", "/bin/bash", username],
check=True, universal_newlines=True)
logging.info("Building key")
subprocess.run('''
source /home/myuser/openvpn-ca/vars
/home/myuser/openvpn-ca/build-key {}'''.format(username),
shell=True, check=True, input='\n\n', universal_newlines=True)

切换到 subprocess.run() 需要相当新的 Python 3 版本。在旧版本中,subprocess.check_call() 会做大致相同的事情,但没有 input= 参数,因此您确实必须为此使用基本的 Popen()

补充说明:

  • source后面的加号明显是语法错误
  • 我们始终使用 check=True 来确保 Python 检查命令是否成功完成。
  • 混合 os.system()subprocess 不是错误,但肯定是可疑的代码味道。

(更多)关于在 U*x 上使用 subprocess 的更多信息:https://stackoverflow.com/a/51950538/874188

关于python - 让python3程序多次按 "enter",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55095892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com