2016-03-19 68 views
1

Python'da bir kitaplık oluşturdum. Linux veya Windows üzerinde kullanabilirim. Python olmayan herhangi bir betik/programın çoğundan buna çağrı yapmak istiyorum. İdeal olarak, mümkünse çapraz platform seçeneği tercih ediyorum, ama şimdilik Linux en önemli olanı. Yine de bir komut istemi arabiriminden diğerine ulaşmak ve sistem çağrılarını/ShellExec stili komut dosyalarını kullanmaktan başka var mı? Bu tüm Windows tabanlı programlama, örneğin, bir dll oluşturmak olsaydı ... Eğer Linux bir şekilde php ve Windows, C + +, vb bir şekilde doğrudan kütüphane kullanabiliyordum olsa harika olurdu. Herhangi bir fikir?Python'u diğer dillerden aramak için Evrensel (veya en iyi) seçeneği?

cevap

0

Çağrılar yapmak çok kapsamlı bir tanımlamadır ve çözüm, bu aramalardan çıkış almak ve almak isteyip istemediğinize bağlıdır. Eğer yaparsanız, JSON kullanarak PHP ve Python arasında oldukça genel bir çözüm takip edebilirsiniz. Php için: NOT: Kodum değil, orijinal here'a bakın.

// This is the data you want to pass to Python 
    $data = array('as', 'df', 'gh'); 

    // Execute the python script with the JSON data 
    $result = shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data))); 

    // Decode the result 
    $resultData = json_decode($result, true); 

    // This will contain: array('status' => 'Yes!') 
    var_dump($resultData); 

Ve Python için

: Eğer gerekmiyorsa

import sys, json 

    # Load the data that PHP sent us 
    try: 
     data = json.loads(sys.argv[1]) 
    except: 
     print "ERROR" 
     sys.exit(1) 

    # Generate some data to send to PHP 
    result = {'status': 'Yes!'} 

    # Send it to stdout (to PHP) 
    print json.dumps(result) 

Açıkçası bu PHP'de system veya popen kullanarak yetebilir. Ayrıca kontrol edin: Eğer komut satırı arayüzü kullanmak istemiyoruz söyledi yana

Question 1 Question 2

+0

Teşekkürler. Verileri her iki yönde de iletmek istiyorum. Cevabınızdaki sıkıntı, aslında aklıma gelen anlık çözüm olan sistem çağrılarını/shellex'i kullanmasıdır, ama alternatif olarak aradığım şeydir. Ancak ilginizden dolayı, bağlantılarınızdan biri, http://www.csh.rit.edu/~jon/projects/pip/ adresinde, en azından python/php ("evrensel" olmasa bile) için ilginç bir olasılık olan bir bağlantı içeriyordu. çözüm). – BuvinJ

+0

Muhtemelen, istediğim şey için komutla çalışan bir arabirimden kaçınmak yok ... – BuvinJ

+0

Python sözdizimini php'ye dönüştürmenin bir yolu yoksa veya bir şekilde yayınladığınız bağlantıda olduğu gibi bir noktada olması gerekir. Python yorumlayıcısını açın (tahmin edeyim, kütüphaneleri python lib'lerine yüklemeye başlamak istediğinizde yeni bir kabus olacaktır). Her durumda bağlantı güncelleniyor ve proje aktif görünüyor. Neden bunu yapan ve yapmaya çalıştığınız şey için işe yarayıp yaramayacağını soran adama başvurmuyorsunuz? – armatita

1

, bir hizmete çapraz platform erişimi için mantıklı cevap bir web API kullanmaktır. Ve bu şekilde yaparak, API'nın tüketicisi sağlayıcıdan farklı bir işletim sisteminde çalışabilir.

Bu blog post'u izlemeden önce API'ler kurdum. Python seçenekleriniz here'un daha eksiksiz bir listesi var.

+0

Bu genel olarak mükemmel bir çözüm olduğunu düşünüyorum ve bunun için sizi destekledim. Komut satırı arayüzünü önler, alt süreçleri önler ve çapraz platformdur! Anında kullanım durumumun ayrıntılarını eklemedim, ancak temel olarak geliştirdiğim bu özel kitaplık özel sunucudan sunucuya güvenli https postaları (ve diğer web protokolleri) zincirini içeriyor. Mesajlar, ssl certs, http kodları vb.den izole eden bir kütüphane hizmeti veren bir istemci sonu istiyorum. Bu yüzden bu çözüm bu amaç için gereksiz ve aptalca olacaktır.(Senin suçun değil, tüm bu detayları ön tarafa eklemedim!) – BuvinJ

+0

Hmm, https://docs.python.org/2/extending/embedding.html diye düşündüm ama sen dedin ki ... komut dosyası/program. Gömülü python sadece müşteriyi de yazıyorsa çalışır. Diğer seçenek, izlediğiniz bir dizinin olması ve istemcinin buna istekte bulunması ve ardından yanıt dosyasına bakılmasıdır. Sadece unix için, adlandırılmış borular var. –

+0

Başka bir iyi öneri. Sadece Windows'da bunu başarmak isteseydim, muhtemelen Python'u bir C++ dll dosyasına yerleştirebileceğimi düşündüm. Diğer tüm MS teknolojileri için uyumlu bir dll yapılabileceğine inanıyorum, ör. C#, VB, vs. Linux'ta bir dll eşdeğeri olmadıkça, bu Linux'a yardımcı olmaz mı? – BuvinJ

İlgili konular