python操作系统()和subprocess.call()生成32512或256个错误

2024-04-25 11:39:13 发布

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

我试图从python运行一个命令行程序“oconv”,该程序预期会以其他几个文件作为输入并生成一个输出文件场景.oct一

我试了两个操作系统()subprocess.call()函数

但是,我要么没有输出,要么输出文件不完整。在

第1类错误代码为32512127,表示“密钥已过期”,第2类错误代码为2561,即“不允许操作”。在

奇怪的是,所有4种被测试的命令行字符串组合都可以在macosx的终端上正常运行

我不知道为什么会发生这种情况,因为测试是在一个新安装和更新的macbookpro上用osxmarvericks和python2.7.5完成的。相关的环境路径变量已经在~/.bash_profile~/.profile中指定(在本例中,我是管理员)。在

我用于测试的python代码如下所示,它包括长/短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)

Tags: cmdanalysiscallscenetoolkitoctsubprocessurban