2010-12-07 13 views
12

मेरे पास यह सी प्रोग्राम है, कम से कम मुझे लगता है कि यह है (फ़ाइलें: स्पा.c, स्पा.h)। आपके उत्तर के लिए धन्यवाद: वहाँ किसी भी तरह से मैं पायथन दुभाषिया के लिए अतिरिक्त तर्क गुजर बिना अजगर से इस स्क्रिप्ट निष्पादित कर सकते हैं (? यदि नहीं, तो क्या तर्क होगा)पायथन में एक सी प्रोग्राम निष्पादित?

अद्यतन है। स्रोत कोड http://www.nrel.gov/midc/spa/#register

(यदि आप फॉर्म भरते हैं, तो कृपया यूआरएल में 'रजिस्टर' से डरो मत, आप फ़ाइलों को तुरंत डाउनलोड कर सकते हैं (कोई सत्यापन मेल, आदि) मैं कोशिश करूंगा अपने सुझाव और परिणामों के साथ वापस रिपोर्ट

अद्यतन 2:। मैं जीसीसी का उपयोग कर स्रोत कोड) संकलित, लेकिन अब यह मेरे लिए एक अनुमति जब कॉल करने के लिए (कोशिश कर से इनकार कर देता है, यहां तक ​​कि रूट के रूप में अजगर चलने के दौरान (आईएम पर उबंटू 10:10)।

अद्यतन 3 [errno 8] Exec प्रारूप त्रुटि

अद्यतन 4 ठीक है, मुझे यह काम मिल गया। कार्यक्रम printf का उपयोग कर मान आउटपुट करता है:

>>> call(['/path']) 
Julian Day: 2452930.312847 
L:    2.401826e+01 degrees 
B:    -1.011219e-04 degrees 
R:    0.996542 AU 
H:    11.105902 degrees 
Delta Psi:  -3.998404e-03 degrees 
Delta Epsilon: 1.666568e-03 degrees 
Epsilon:  23.440465 degrees 
Zenith:  50.111622 degrees 
Azimuth:  194.340241 degrees 
Incidence:  25.187000 degrees 
Sunrise:  06:12:43 Local Time 
Sunset:  17:20:19 Local Time 

धन्यवाद सब!

+0

क्या आप यहां अपने 'स्पा से कुछ अंश पोस्ट कर सकते हैं।सी' (या, बेहतर अभी तक, पूरा कोड)? हालांकि कुछ सी-जैसे स्क्रिप्टिंग कार्यान्वयन मौजूद हैं, आम तौर पर सी एक संकलित भाषा है। यहां तक ​​कि यदि आपको पाइथन में लिखे गए कुछ सी दुभाषिया मिलते हैं, तो मनमाने ढंग से सी प्रोग्राम काम करने की संभावना बहुत पतली होती है। – atzz

+0

जहां तक ​​मुझे पता है, वहां कोई तर्क नहीं है जो पाइथन दुभाषिया को सी कंपाइलर में परिवर्तित कर सकता है। लेकिन आप डीएलएस या साझा libs से सी कोड चलाने के लिए पायथन ctypes का उपयोग कर सकते हैं। –

उत्तर

40

सी स्क्रिप्ट जैसी कोई चीज़ नहीं है। यदि आपका मतलब सी प्रोग्राम है तो आपको इसे चलाने से पहले spa.c और spa.h निष्पादन योग्य में संकलित करने की आवश्यकता है।

आप लिनक्स या मैक ओएस एक्स में जीसीसी का उपयोग करते हैं:

$ gcc -Wall spa.c -o spa 

आप एक निष्पादन spa नामित हो जाएगा।

उसके बाद, आप spa कार्यक्रम अपने अजगर स्क्रिप्ट से साथ चला सकते हैं:

from subprocess import call 
call(["./spa", "args", "to", "spa"]) 
+0

'args' क्या होना चाहिए: तर्क के साथ एक स्ट्रिंग? उदाहरण के लिए: 'args = "- मेरे प्रोग्राम के लिए विकल्प" '? – Sigur

3

इस स्रोत कोड है। इसके साथ कुछ भी करने से पहले आपको इसे संकलित करना होगा। यह निष्पादन योग्य नहीं है।

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। – Prune

+0

@Prune: इस तरह की टिप्पणियों के लिए सही जगह मेटा है। मैं आप चर्चा करना चाहता हूं कि टिप्पणियों में क्या रखा जाना चाहिए और जवाब में क्या रखा जाना चाहिए कृपया वहां जाएं। यह एक अच्छी चर्चा है क्योंकि कई पोस्टर वास्तव में टिप्पणियों में जवाब दे रहे हैं। http://meta.stackoverflow.com/questions/253045/answerers-who-only-use-comments। एफवाईआई: ओपी (अपडेट से पहले) ने सी स्रोत को एक स्क्रिप्ट के रूप में निष्पादित करने के लिए कहा। मैंने जवाब दिया कि इसे सीधे नहीं कहा जाना चाहिए था। इसे पहले संकलित किया जाना था। यह एक जवाब है और यह सहायक है। कोई स्पष्टीकरण की आवश्यकता नहीं है (और कई अन्य ने मुझे उत्तर दिया)। – kriss

3

सी एक पटकथा भाषा नहीं है। आपको एक्जिक्यूटेबल में स्पा.c को संकलित करना होगा। आप अपने ओएस कहना नहीं है, लेकिन अगर मैक या लिनक्स,

gcc spa.c -o spa 

का प्रयास करें कि काम करता है, अब आप एक निष्पादन योग्य नामित स्पा की है। आप इसे कॉल करने के लिए पाइथन के os.system() का उपयोग कर सकते हैं।

3

एक सी जैसी कोई चीज नहीं स्क्रिप्ट आप सी कार्यक्रमों संकलित करने के लिए ... यदि आप एक निष्पादन करने के लिए संकलन की जरूरत है, तो आप यह os.system(CommandLine)

10

cinpy का उपयोग कर निष्पादित पास TCC की भयानक संयोजन का उपयोग कर सकते हैं आता है और ctypes

निम्नलिखित कोड पैकेज में शामिल cinpy_test.py से फिसल गया है।

import ctypes 
import cinpy 

# Fibonacci in Python 
def fibpy(x): 
    if x<=1: return 1 
    return fibpy(x-1)+fibpy(x-2) 

# Fibonacci in C 
fibc=cinpy.defc("fib", 
       ctypes.CFUNCTYPE(ctypes.c_long,ctypes.c_int), 
       """ 
       long fib(int x) { 
        if (x<=1) return 1; 
        return fib(x-1)+fib(x-2); 
       } 
       """) 

# ...and then just use them... 
# (there _is_ a difference in the performance) 
print fibpy(30) 
print fibc(30) 
+0

कोई भी जानता है कि मैं 'cinpy' कहां डाउनलोड कर सकता हूं? मूल यूआरएल अब उपलब्ध नहीं है। – OGP

+0

ठीक है, इसे वेब आर्काइव में मिला। – OGP

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