我正在使用 Python 2.7
我正在尝试从 Python 运行 StatTransfer 程序。
当我尝试:
tempname = os.path.abspath('./text.txt')
TEMPFILE = open(tempname, 'wb')
try:
subprocess.check_call('ST convert.stc', shell = True, stdout = TEMPFILE, stderr = TEMPFILE)
except:
raise CritError(messages.crit_error_bad_command)
它失败了(CritError 是用户定义的)。
回溯并没有告诉我任何有用的信息:
Traceback (most recent call last):
File "C:\...\py\run_program.py", line 181, in run_stcmd
run.execute_run(current_directory, posix_command, nt_command)
File "C:\...\py\private\runprogramdirective.py", line 99, in execute_run
raise CritError(messages.crit_error_bad_command)
CritError: 'ERROR! Cannot execute command'
但是将相关行更改为:
subprocess.call('ST convert.stc', shell = True, stdout = TEMPFILE, stderr = TEMPFILE)
它运行成功。
有趣的是,对于这两种情况,我在我的 TEMPFILE 中看到了相同的内容:
|/-|/-|/-|/-|/- |/-|/-|/-|/-|/- Stat/Transfer - Command Processor (c) 1986-2011 Circle Systems, Inc.
www.stattransfer.com
Version 10.1.1866.0714 (32 Bit) - 64 Bit Windows
Serial: ADR4H-L3A3A-N8RJ
User: XXXXXXXXXXX
Your license is in its grace period -- Please call Circle Systems
Your program will die at the end of the month
Status: Temporarily OK (Expired May 31, 2012)
Transferring from SPSS Portable File: ..\orig\10908970\ICPSR_03775\DS0001\03775-0001- Data.por
Input file has 26 variables
Optimizing...
Transferring to Stata: ..\data\ABCFeb.dta
504 cases were transferred(0.02 seconds)
请注意,如果我从 Windows 命令行运行“st convert.stc”,它运行得很好,并给了我上面相同的日志消息。它确实实现了 convert.stc 中所写的内容。
这表明使用 subprocess.check_call 调用 StatTransfer 程序。但是,在它的末尾有一个错误。这是什么错误?我该如何避免呢?我应该使用这两个命令中的哪一个,为什么?
ETA:在下面的mgilson之后,我从 subprocess.call 返回值并获得 -1。这是什么意思?为什么程序仍然运行而我似乎没有注意到任何真正的错误?
关于我应该如何在这里执行此操作的任何可能的解释和建议?
谢谢。