从Python运行Stata并确保没有错误

2024-09-30 01:29:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道如何从Python启动Stata。这里我有一个小程序

def dostata(dofile, *params):
    ## Launch a do-file, given the fullpath to the do-file
    ## and a list of parameters.       
    cmd = ["C:\Program Files (x86)\Stata13\StataMP-64.exe", "do", dofile]
    for param in params:
        cmd.append(param)
    a = subprocess.Popen(cmd, shell=True)

path = "C:/My/do/file/dir/"
filename = "try.do"

dostata(path + filename, model, "1", "")

这或多或少起作用了。但这并不能保证Stata项目能成功完成。如何从Stata得到一些反馈给Python说“已成功完成”?在


Tags: thepath程序cmdparamdefparamsfilename
1条回答
网友
1楼 · 发布于 2024-09-30 01:29:04

子流程使用returncode返回底层调用进程的成功(零)或失败的(非零)结果。在

但是,Stata do文件并不完全是可执行文件,而是作为batch jobs运行。因此,Stata.exe文件将始终返回成功代码,因为无论.do代码输出如何,它都将始终运行。因此,考虑下面这个例子,Python读取Stata的日志并将其输出到控制台,以便用户查看代码结果。甚至可能要求Python扫描日志文件中的任何Stata error coder(1)-r(9999),如果日志文件中存在,则强制Python向其发送消息。在

import os, subprocess

# CURRENT DIRECTORY
cd = os.path.dirname(os.path.abspath(__file__))

def openlog(filename):
    with open(filename, 'r') as txt:
        for line in txt:
            print(line.strip())

def dostata(dofile, logfile, *params):
    ## Launch a do-file, given the fullpath to the do-file
    ## and a list of parameters.       
   cmd = ["C:\Program Files (x86)\Stata13\StataMP-64.exe", "/b", "do", dofile]
   for param in params:
       cmd.append(param)
   a = subprocess.Popen(cmd, shell=True)

   print('STATA OUTPUT:\n')
   openlog(os.path.join(cd, logfile))


path = "C:/My/do/file/dir/"
filename = "try.do"
logname = "try.log"

result = dostata(os.path.join(path, filename), logname, "")

相关问题 更多 >

    热门问题