Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果修改调用前使用的文件,则子进程调用不执行_Python_Subprocess - Fatal编程技术网

Python 如果修改调用前使用的文件,则子进程调用不执行

Python 如果修改调用前使用的文件,则子进程调用不执行,python,subprocess,Python,Subprocess,我有一个python程序,首先编辑一个文件,然后根据修改后的文件执行子进程调用。 代码是 mwhome=sys.argv[1] wlst=mwhome+"/oracle_common/common/bin/wlst.sh" scriptloc=cwd+"/addldap.py" dest=cwd+'/t6.py.temp' source=open(scriptloc,'r') destination=open('t6.py.temp','w') for line in source:

我有一个python程序,首先编辑一个文件,然后根据修改后的文件执行子进程调用。 代码是

mwhome=sys.argv[1]
wlst=mwhome+"/oracle_common/common/bin/wlst.sh"
scriptloc=cwd+"/addldap.py"
dest=cwd+'/t6.py.temp'
source=open(scriptloc,'r')
destination=open('t6.py.temp','w')

for line in source:
    if line.strip().startswith('adminUser'):
        destination.write('adminUser=\"'+adminusername+"\"\n")
        continue
    elif line.strip().startswith('adminPassword'):
        destination.write('adminPassword=\"'+adminpassword+"\"\n")
        continue
    elif line.strip().startswith('adminServerPort'):
        destination.write('adminServerPort=\"'+adminserverport+"\"\n")
        continue
    else:

        destination.write(line)
        continue

shutil.move(dest, scriptloc)


print "starting adding ldap"
output = subprocess.call([ wlst,scriptloc])
如果我不执行loop and replace的修改文件,subprocess.call将正常工作。 如果执行modify for循环,则子流程调用不会获取scriptloc文件,而只是在没有正确参数的情况下执行wlst.sh

哪个命令与执行相互影响


注意:放置了一个source.close()并尝试了一次,但没有成功。close()就是成功的。当像这里这样打开文件进行写入时,各种
.write()
将被缓冲。这意味着它们可能不会出现在实际文件中,或者只是部分出现,直到文件被
flush()
-ed或
close()
-ed。您也可以尝试在for循环之后添加destination.close()。顺便说一句,“继续”的呼吁是多余的。如果。。。埃利夫。。。else只执行一个套件,之后会有一个隐式的“continue”。子流程调用引用的名称(变量)“wlst”未在此代码中显示;不清楚这是否是您的代码的问题。(有人想知道为什么不修改addldap.py以接受其stdin上的命令并通过管道提供数据,而不是通过临时文件写入数据,或者将addldap重构为一个模块以导入带有参数的can调用。删除了continue并添加了一个destination close。不知道是谁做的。立即工作。感谢continue行被删除。)无意义但多余的。