我正在尝试使用PYXLL从excel启动python子进程,但它在启动cmd窗口和运行命令时似乎遇到了问题。
下面是我试图运行的示例:
@xl_macro()
def test():
if 1 == 1:
xlcAlert("Next line nothing happens") #Popup appears
p = subprocess.Popen(r'start cmd /k', shell=True, creationflags=subprocess.CREATE_NEW_CONSOLE, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
xlcAlert("{}".format(p.pid)) #p was never launched我正在尝试从excel捕获值并在子进程中传递它们。这是在我的IDE中执行时起作用的:数据从excel读取,然后子进程启动窗口。但是,一旦添加了装饰器,使它作为宏运行在EXCEL中,一旦到达subprocess.Popen行,脚本就会停止。有任何方法从pyxll启动子进程吗?
发布于 2022-07-06 12:55:08
经过调查,多亏了查尔斯·达菲( Charles ),Microsoft杀死了外壳子进程。这在最新版本中是出于安全考虑而实现的。
简单的解决方案是使用shell=False运行子进程并在列表中传递args:
p1 = subprocess.Popen(cmdlist, shell=False)沙箱不会终止进程--脚本运行时将打开python窗口。
https://stackoverflow.com/questions/72734139
复制相似问题