我有以下结构
C:\Users\dhiwakarr\workspace\BasicRegressionOnJoker\create&&bkp\script1.py
script1.py
将调用位于
script2.py
中定义的函数/方法
C:\Users\dhiwakarr\workspace\basics\script2.py
问题是script2.py
将使用与XML File (create.xml)
位于同一文件夹中的script2.py
。但是当我在script2.py
FROM script1.py
中调用此方法时。我收到以下错误,
execute: Error 0x304: Failed to read the input file[createsc.xml].
Traceback (most recent call last):
File "create&&bkp.py", line 19, in <module>
CreateSC.create()
我的猜测是被调用脚本(script2.py
)正在调用脚本(script1.py
)中搜索此文件。如何使script1.py中调用的script2.py方法在其自己的目录中进行搜索?
更新
script1.sc
import subprocess,sys,getopt,codecs,re,string
import xml.etree.ElementTree as ET
sys.path.insert(0,r'C:\Users\dhiwakarr\workspace\basics')
import Login
import script2
#import script3
try:
#First call the login script to login
print('Login started')
Login.login()
print('Create Subclient')
script2.create()
...
script2.py
import subprocess,sys,os,inspect
from sys import stdout
from _winapi import NULL
def create():
'''
A text file with information about the Client,Storage Policy,Backupset,Subclient & Content of each subclient must be given as seen in sample-create.txt
'''
inputfile = r'C:\Users\dhiwakarr\workspace\create.txt'
finp = open(inputfile,'r')
path = str(os.getcwd())
print('Current Working Path is -- '+path)
for line in finp:
line=line.rstrip('\n')
....
# Creating the Subclient
subprocess.check_call(["C:\\Program Files\\CommVault\\Simpana\\Base\\qoperation.exe", 'execute', '-af', `'createsc.xml',` '-appName', "'File System'",'-clientName', client,'-backupsetName', bset, '-subclientName', scname, '-storagePolicyName', storagepolicy])
else:
参见line subprocess.check_call([&#34; ...它无法读取XML。
答案 0 :(得分:2)
所提供的信息稀少,更多代码会有所帮助。
通常,当从命令行调用脚本时,基本路径将是路径,而shell将被定向到不调用的路径。
要获取有关脚本查找文件的位置的信息,请插入
print os.getcwd()
在适当的位置(在打开或文件命令之前)。你需要从电池组中导入'os'。
此外,为了更好地理解潜在的问题,使用
try:
f = open(f)
…
except IOError as e:
print "I/O error({0}): {1}".format(e.errno, e.strerror)
except:
print "Unexpected error:", sys.exc_info()[0]
raise
可能会更好地理解潜在的问题。
您添加的代码信息:
sys.Path(.extend; .insert)的更改不会更改文件I / O的目录。 sys.Path仅指向模块加载器。使用os.chdir或文件I / O的相对路径。使用上面的print os.getcwd()方法获取有关代码查找.xml文件的位置的更多信息。