这就是我想要做的事情:
同时从Stata调用8个python脚本(为了节省时间;如果顺序执行,则需要太长时间)。我知道怎么称呼:
shell“C:/Python34/python.exe”“A:/ my code / Test.py”
让Stata等到他们全部完成,然后在Stata内做。
是否可以同时调用多个Python脚本?
答案 0 :(得分:2)
我无法访问Windows计算机,但这样的事情可能会成功。更改第二部分以匹配您在Python中所做的事情。
/* (1) Instead of Python scripts, count some files and store the counts */
winexec rm "/Users/dimitriy/*_count.txt"
winexec find /Users/dimitriy -type f -name '*.ado' | wc -l > ado_count.txt
winexec find /Users/dimitriy -type f -name '*.pdf' | wc -l > pdf_count.txt
winexec find /Users/dimitriy -type f -name '*.do' | wc -l > do_count.txt
/* (2) Wait for ALL 3 files to be generated since Stata does not wait for winexec commands to finish */
capture ssc install fs, replace
while "`num_files'" != "3" {
local num_files: word count `r(files)'
sleep 10000 // sleep 10 seconds
fs *_count.txt
}
di "All Done!"
对以下评论的回复:
这没有任何意义,并且不会因为一系列原因而起作用。我假设您的Python脚本吐出8个输出文件。由于我不知道它们是什么,我尝试使用3个Mac命令生成三个文件,以便在步骤1中使用。步骤2在继续之前验证这3个文件是否存在。
假设每个Python脚本我为i = 1,..,8生成一个名为output_i.txt的文件,你需要有这样的东西:
forvalues v=1/8 {
winexec "C:/Python34/python.exe" "D:/my code/PythonCode`v'.py"
}
capture ssc install fs, replace
while "`num_files'" != "8" {
local num_files: word count `r(files)'
sleep 10000 // sleep 10 seconds
fs output_*.txt
}