【问题标题】:Stata batch called from Python: Pipe Stata console output to command line从 Python 调用的 Stata 批处理:管道 Stata 控制台输出到命令行
【发布时间】:2013-11-05 19:55:28
【问题描述】:

我有一个 Python 脚本,它调用多个 Stata do 文件:

from subprocess import call
Stata_exec = "D:/Stata 12 MP2/StataMP-64.exe"
dofile = "D:/Test.do" 
call( "\"{0}\" do /e \"{1}\"".format(Stata_exec, dofile), shell=True)

这是一个测试do文件:

/* Merge some big files */

clear *

// Create dataset A (8000 variables, 300 observations)
set obs 300
gen ID = _n
forval i = 1/8000 {
    gen variableA`i' = runiform()
}
tempfile dataA
save "`dataA'"

// Create dataset B (5000 variables, 300 observations)
clear 
set obs 300
gen ID = _n
forval i = 1/5000 {
    gen variableB`i' = runiform()
}

sort ID

// Attempt merge
merge 1:1 ID using `dataA'
exit, clear

我希望将do 文件的进度实时传送到控制台,以便与其他 Python 输出集成。

这可能吗?

【问题讨论】:

    标签: python python-3.x batch-file stata


    【解决方案1】:

    您可以使用log 命令将Stata 会话的副本回显到文件,或者使用file 命令将特定消息(如“Data A Created”)写入文本文件。 Python应该可以用subprocess.call(["tail", "-F", logfilename])显示这样的文件

    【讨论】:

    • 感谢您的回答。我曾考虑过记录,然后在 do 文件完成后在控制台中打开日志。问题是我批量提交的.do文件需要很长时间才能完成,在此期间唯一的控制台输出是python打印语句print("Do file running...")。我的主要愿望是在控制台中有视觉证据表明 Stata 在后台做某事。
    • 您可以在 Stata 工作时定期“查看”日志。无需等到最后。
    • 这可能需要成为一个单独的问题,但我将如何查看在同一脚本中执行 python 命令期间编写的 stata 日志文件(在 python 脚本中)。
    • 我有 Windows,它说 tail 不是一个公认的命令(不幸的是,我没有使用 Unix 的易用性)。另外,我是否错误地假设subprocess.call(["tail", "-F", logfilename]) 在上述call( "\"{0}\" do /e \"{1}\"".format(Stata_exec, dofile), shell=True) 完成之前不会触发,因此错过了重点?不过,我是 subprocess 的新手,可能完全错了。
    • @DimitriyV.Masterov 如果你有空闲时间,你能扩大你的答案吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2015-12-29
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多