Python - Called Script正在Calling Script的目录中搜索一个文件

时间:2014-11-17 06:20:52

标签: python django

我有以下结构

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。

1 个答案:

答案 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文件的位置的更多信息。