2010-11-20 13 views
14

मेरी समस्या यह है कि मैं एक अजगर फ़ाइल लौटे मूल्यों को प्राप्त करने के लिए अंदर से एक तर्क के साथ एक अजगर फ़ाइल निष्पादित करने के लिए चाहते हैं अंदर से एक तर्क के साथ एक अजगर स्क्रिप्ट फ़ाइल को कार्यान्वित करने के लिए ....कैसे एक और अजगर स्क्रिप्ट फ़ाइल

अगर मैं इसे अच्छी तरह से समझाया है मैं नहीं जानता ...

उदाहरण:

खोल से

मैं इस पर अमल:

  getCameras.py "path_to_the_scene" 

और यह मेरे कैमरे की एक सूची प्रदान .. ..

तो मैं इस स्क्रिप्ट (तर्क सहित) को दूसरी स्क्रिप्ट से कैसे कॉल कर सकता हूं ???

मैं यहां कुछ अन्य प्रश्न पढ़कर इसे समझने की कोशिश कर रहा हूं, लेकिन मुझे यह ठीक नहीं मिला, क्या मुझे execfile() फ़ंक्शन का उपयोग करना चाहिए ?? बिल्कुल कैसे??

मेरे जैसे नौसिखिया की मदद के लिए अग्रिम धन्यवाद !!

ठीक है, अपने उत्तरों को देखने के बाद, मुझे इसे और अधिक संक्षिप्त बनाने के लिए अपना प्रश्न संपादित करना होगा और क्योंकि मुझे कुछ जवाब नहीं हैं (क्षमा करें, जैसे मैंने कहा कि मैं नौसिखिया हूं !!!):

ठीक है, मेरे पास यह 2 स्क्रिप्ट "getMayaCameras.py" और "doRender.py" है और एक और जिसे "renderUI.py" कहा जाता है जो एक GUI में पहली 2 स्क्रिप्ट लागू करता है।

"getMayaCameras.py" और "doRender.py" दोनों ही संकेत हैं कि आप तर्क (या झंडे, "doRender.py" मामले में) जोड़कर सीधे सिस्टम खोल से निष्पादित कर सकते हैं और यदि यह संभव है , मैं अभी भी यह सकारात्मकता रखना चाहता हूं, इसलिए मैं यूआई निष्पादित करने के बीच चयन कर सकता हूं या शेल

से स्क्रिप्ट को निष्पादित करने के बीच चुन सकता हूं। मैंने उन्हें "renderUI.py" स्क्रिप्ट से आयात करके काम करने के लिए पहले ही कुछ संशोधन किए हैं लेकिन अब वे खुद से काम नहीं करते हैं ....

क्या यह स्क्रिप्ट स्वयं द्वारा काम कर रही है और अभी भी उन्हें किसी अन्य स्क्रिप्ट से कॉल करने की संभावना है? बिल्कुल कैसे? यह "कमांड लाइन तर्क हैंडलिंग से तर्क को अलग करना" जो आपने मुझे अच्छा लगता है इससे पहले मुझे बताया था, लेकिन मुझे नहीं पता कि मेरी स्क्रिप्ट पर इसे कैसे कार्यान्वित किया जाए (मैंने कोशिश की लेकिन बिना सफलता के) ....

यही कारण है कि मैं यह देखने के लिए यहां मूल कोड पोस्ट कर रहा हूं कि मैंने इसे कैसे बनाया है, आलोचकों को बनाने के लिए स्वतंत्र महसूस करें और/या मुझे यह बताने के लिए कोड को सही करें कि मुझे स्क्रिप्ट के लिए इसे सही तरीके से कैसे काम करना चाहिए ...

#!/usr/bin/env python 

import re,sys 

if len(sys.argv) != 2: 
    print 'usage : getMayaCameras.py <path_to_originFile> \nYou must specify the path to the origin file as the first arg' 
    sys.exit(1) 


def getMayaCameras(filename = sys.argv[1]): 
    try: 
     openedFile = open(filename, 'r') 
    except Exception: 
     print "This file doesn't exist or can't be read from" 
     import sys 
     sys.exit(1) 

    cameras = []  
    for line in openedFile: 
     cameraPattern = re.compile("createNode camera")  
     cameraTest = cameraPattern.search(line) 
     if cameraTest:  
      cameraNamePattern = re.compile("-p[\s]+\"(.+)\"")   
      cameraNameTest = cameraNamePattern.search(line)   
      name = cameraNameTest.group(1)   
      cameras.append(name)    
    openedFile.close() 

    return cameras  

getMayaCameras() 

एक बार फिर धन्यवाद,

डेविड

उत्तर

39

सबसे अच्छा जवाब नहीं है। अपने getCameras लिखें।py

import stuff1 
import stuff2 
import sys 

def main(arg1, arg2): 
    # do whatever and return 0 for success and an 
    # integer x, 1 <= x <= 256 for failure 

if __name__=='__main__': 
    sys.exit(main(sys.argv[1], sys.argv[2])) 

अपने अन्य स्क्रिप्ट से के रूप में, आप तो

import getCamera 

getCamera.main(arg1, arg2) 

कर सकते हैं या getCamera.py

में किसी भी अन्य कार्यों फोन
+1

मैं इसे बहुत अच्छी तरह से समझ नहीं पा रहा हूं, इस तरह आप अभी भी शैल से तर्क के साथ स्क्रिप्ट को कॉल करने में सक्षम हैं? ... वैसे भी मैंने अपनी स्क्रिप्ट में इसे सफलतापूर्वक लागू करने की कोशिश की, कृपया आप इसे कर सकते हैं स्क्रिप्ट के साथ मैंने यहां छोड़ा, इसलिए मैं इसे उदाहरण के रूप में उपयोग कर सकता हूं? – user497457

+0

काम नहीं करता है ... – user1701047

0

execfile() दूसरे के भीतर एक स्क्रिप्ट चलाता है, जो आप नहीं चाहते हैं। subprocess मॉड्यूल का उपयोग पाइथन दुभाषिया का एक और उदाहरण चलाने के लिए किया जा सकता है, लेकिन आपको क्या करना चाहिए getCameras.py पर देखें और देखें कि क्या कुछ फ़ंक्शन है जिसे आप आयात करने के बाद बुला सकते हैं।

9

सबसे पहले, मैं दूसरों को आप संपादित करना चाहिए के साथ सहमत अपने कमांड लाइन तर्क हैंडलिंग से तर्क को अलग करने के लिए कोड।

लेकिन ऐसे मामलों में जहां आप अन्य पुस्तकालयों का उपयोग कर रहे हैं और उन्हें संपादित करने के आसपास गड़बड़ नहीं करना चाहते हैं, यह अभी भी उपयोगी है कि पाइथन के भीतर समकक्ष कमांड लाइन सामग्री कैसे करें।
समाधान os.system (कमांड)
विंडोज पर कम से कम, यह एक कंसोल लाता है और कमांड प्रॉम्प्ट में प्रवेश करता है, वैसे ही वैसे ही कमांड प्रॉम्प्ट में प्रवेश करता है।

import os 
os.system('getCameras.py "path_to_the_scene" ') 
+1

उत्तर के लिए धन्यवाद लेकिन मैं इसे काम नहीं कर सकता, कम से कम अगर मैं कैमरे की तरह कुछ करता हूं = os.system ('getCameras.py "path_to_the_scene"') ..... यह लौटा मूल्य नहीं मिलता है – user497457

0

मेरा सुझाव है कि आप अपने getCameras.py को पुनर्गठित करें, get_cameras() नामक विधि में कैमरा सूची कोड प्राप्त करें। फिर आप इस विधि को अन्य पायथन स्क्रिप्ट में कॉल कर सकते हैं।

getCameras.py

def get_cameras(): 
bulabula... 
if __name__ == '__main__': 
return get_cameras() 

उपयोग कैसे करें: other.py

import getCameras 
camera_list = getCameras.get_cameras() 
2

एक और तरीका है कि os.system() का उपयोग कर os.system() को बदलने के लिए subprocess मॉड्यूल जो आविष्कार किया गया था उपयोग करने के लिए किया जाएगा करने के लिए बेहतर हो सकता है कुछ अन्य पुराने पुराने मॉड्यूल के साथ। होगा इस प्रकार दिखाई देगा

import argparse 

# Initialize argument parse object 
parser = argparse.ArgumentParser() 

# This would be an argument you could pass in from command line 
parser.add_argument('-o', action='store', dest='o', type=str, required=True, 
        default='hello world') 

# Parse the arguments 
inargs = parser.parse_args() 
arg_str = inargs.o 

# print the command line string you passed (default is "hello world") 
print(arg_str) 

एक मास्टर कार्यक्रम से subproccess साथ उपरोक्त कार्यक्रम का उपयोग करना:: निम्नलिखित कार्यक्रम से एक होने के साथ आप कुछ मास्टर कार्यक्रम के साथ कॉल करना चाहते हैं

import subprocess 

# run your program and collect the string output 
cmd = "python your_program.py -o THIS STRING WILL PRINT" 
out_str = subprocess.check_output(cmd, shell=True) 

# See if it works. 
print(out_str) 

के अंत में जिस दिन यह "THIS STRING WILL PRINT" प्रिंट करेगा, वह वह है जिसे आपने मास्टर प्रोग्राम कहा था। subprocess में बहुत सारे विकल्प हैं लेकिन यह उपयोग करने योग्य है क्योंकि यदि आप इसका उपयोग करते हैं तो अपने प्रोग्राम सिस्टम स्वतंत्र होंगे। subprocess, और argparse के लिए प्रलेखन देखें।

संबंधित मुद्दे