首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图从宏启动子进程

试图从宏启动子进程
EN

Stack Overflow用户
提问于 2022-06-23 17:12:37
回答 1查看 53关注 0票数 0

我正在尝试使用PYXLL从excel启动python子进程,但它在启动cmd窗口和运行命令时似乎遇到了问题。

下面是我试图运行的示例:

代码语言:javascript
复制
  @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启动子进程吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-06 12:55:08

经过调查,多亏了查尔斯·达菲( Charles ),Microsoft杀死了外壳子进程。这在最新版本中是出于安全考虑而实现的。

简单的解决方案是使用shell=False运行子进程并在列表中传递args:

代码语言:javascript
复制
p1 = subprocess.Popen(cmdlist, shell=False)

沙箱不会终止进程--脚本运行时将打开python窗口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72734139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档