我正在尝试从python运行命令行程序“oconv”,它希望将其他几个文件作为输入并生成输出文件scene.oct。
我尝试了 os.system()和 subprocess.call()函数
但是,我没有输出或输出文件不完整。
第一种类型的错误代码是 32512 或 127 ,意味着“密钥已过期”,第二种类型的错误代码是 256 或 1 ,表示“操作不允许”。
奇怪的是,所测试的所有4种类型的命令行字符串组合都可以在Mac OS X终端中正常运行。
我不知道为什么会出现这种情况,因为测试是在重新安装和更新的Macbook Pro上使用OS X Marvericks和Python 2.7.5完成的。并且相关的环境路径变量已经在〜/ .bash_profile 和〜/ .profile 中指定(在这种情况下我是管理员)。
我用于测试的python代码如下所示,其中包括long / short cmd字符串和/或完整cmd路径之间的四种组合:
import os
import subprocess
### 1. long cmd str, no cmd path (no output, error code: 32512 or 127, meaning Key has expired)
##cmd = "oconv /Volumes/ZJ_WD_2TB_1/_ZJ_Urban_Toolkit_v003/glare_analysis/materials.mat /Volumes/ZJ_WD_2TB_1/_ZJ_Urban_Toolkit_v003/glare_analysis/sky.rad /Volumes/ZJ_WD_2TB_1/_ZJ_Urban_Toolkit_v003/glare_analysis/scene.rad > /Volumes/ZJ_WD_2TB_1/_ZJ_Urban_Toolkit_v003/glare_analysis/scene.oct"
##os.system(cmd)
##subprocess.call(cmd, shell=True)
### 2. short cmd str, no cmd path (no output, error code: 32512 or 127, meaning Key has expired)
##cmd = 'oconv ./materials.mat ./sky.rad ./scene.rad > ./scene.oct'
##os.system(cmd)
##subprocess.call(cmd, shell=True)
### 3. long cmd str, full cmd path (can get incomplete output, error code: 256 or 1, meaning Operation not permitted)
##cmd = '/Applications/Radiance_4_3_a_1/bin/oconv /Volumes/ZJ_WD_2TB_1/_ZJ_Urban_Toolkit_v003/glare_analysis/materials.mat /Volumes/ZJ_WD_2TB_1/_ZJ_Urban_Toolkit_v003/glare_analysis/sky.rad /Volumes/ZJ_WD_2TB_1/_ZJ_Urban_Toolkit_v003/glare_analysis/scene.rad > /Volumes/ZJ_WD_2TB_1/_ZJ_Urban_Toolkit_v003/glare_analysis/scene.oct'
##os.system(cmd)
##subprocess.call(cmd, shell=True)
### 4. short cmd str, full cmd path (can get incomplete output, error code: 256 or 1, meaning Operation not permitted)
##cmd = '/Applications/Radiance_4_3_a_1/bin/oconv ./materials.mat ./sky.rad ./scene.rad > ./scene.oct'
###os.system(cmd)
##subprocess.call(cmd, shell=True)