2013-11-05 29 views
7

Bir formdaki bilgileri kullanan basit bir uygulama yazıyorum, bir python betiği yürüten ve sonuçları veren bir PHP betiğine $ _POST üzerinden aktarır. Ben yaşıyorum sorun benim python komut dosyası aslında argümanlar içinde geçirilen ile çalışmıyor olmasıdırPHP Değişkenleri ile Python Komut Dosyası Yürütme

process3.php dosyası:.

<?php 
    $start_word = $_POST['start']; 
    $end_word = $_POST['end']; 
    echo "Start word: ". $start_word . "<br />"; 
    echo "End word: ". $end_word . "<br />"; 
    echo "Results from wordgame.py..."; 
    echo "</br>"; 
    $output = passthru('python wordgame2.py $start_word $end_word'); 
    echo $output; 
?> 

Çıktı:

Start word: dog 
End word: cat 
Results from wordgame.py... 
Number of arguments: 1 arguments. Argument List: ['wordgame2.py'] 

üst kısmında benim wordgame2.py, aşağıdaki (hata ayıklama amacıyla):

#!/usr/bin/env python 
import sys 
print 'Number of arguments:', len(sys.argv), 'arguments.' 
print 'Argument List:', str(sys.argv) 

Neden uyuşmuyor argümanlar geçiyor = 3? (Evet, formum verileri doğru bir şekilde gönderiyor.)

Herhangi bir yardım büyük beğeni topluyor!

Düzenleme: Böyle ... Ben açıkça o başlangıç ​​ve bitiş kelimeyi söylemek çalıştırılamamasını olmadığını şey ekleyebiliriz:

$output = passthru('python wordgame2.py cat dog'); 
echo $output 
+0

php dosyanızda 'python wordgame2.py $ start_word $ end_word'' echo'yu ne zaman görürsünüz? – GWW

+0

o satırı ekledikten sonra, şimdi çıkışı: Başlat kelimesini: köpek Bitiş kelime: kedi wordgame.py dan Sonuçlar ... piton wordgame2.py köpek kedi argümanlardan sayısı: 1 argümanlar. Bağımsız değişkenler listesi: ['wordgame2.py'] – Micah

+0

Bence bu hata $ $ $ = passthru ('python wordgame2.py $ start_word $ end_word'); '' Bu deneyin $ çıktı = passthru ('python wordgame2.py') $ başlangıç_adı. "".$ end_word); 'Belki python, $ anahtar sözcüğünden kaynaklanan argümanları reddediyor (ya da $ $ değişken yeniden yerleştirme için kabuğu çağırıyor) –

cevap

9

Güncelleme - Şimdi

farkındayım o PHP, hata tek tırnak işaretleri ' kullanarak yatıyor. PHP'de, tek tırnaklı dizeler hazır bilgi olarak kabul edilir, PHP içerideki içeriği değerlendirmez. Ancak, çift tırnaklı " dizeleri değerlendirilir ve sizden beklediğiniz gibi çalışır. Bu güzel bir şekilde this SO answer'da özetlenmiştir. Bizim durumumuzda,

$output = passthru("python wordgame2.py $start_word $end_word"); 

çalışır, ancak olurdu şu olmaz -

$output = passthru('python wordgame2.py $start_word $end_word'); 

Orjinal cevap -

ben hata

$output = passthru("python wordgame2.py $start_word $end_word"); 

yatıyor düşünüyorum Bunu deneyin

$output = passthru("python wordgame2.py ".$start_word." ".$end_word); 
+1

Açık çözüm" yerine "kullanılmaz mıydı? Değişken ne zaman bitiştirilmeye gerek yok? interpolasyon. –

+0

Hmm ... php ile pek tanımadım (hiçbiri yok), bu yüzden sadece benim cevabım ile başlıyor * Sanırım ... * –

+1

Ayrıca, olasılıkla, escapeshellarg() 'yi, bittiğinde geçen iki argümanda kullanmak iyidir . – Terry

1

Katkılarınız için teşekkür ederiz. Ben bu basit düzeltme ile sorunumu anladım adres:

$command = 'python wordgame2.py ' . $start_word . ' ' . $end_word; 
$output = passthru($command); 

düzgün php değişkenleri ele passthru için, bu yürütmeden önce dize halinde birleştirilmiş olması gerekir.

+2

Cevabınız, cevabınızı cevaplamak yerine cevabını kabul edin. – aIKid

+0

Cevabını görmeden önce bunu göndermiştim. Lütfen zaman damgasına bakın. – Micah

+0

Aslında, 7 saniye önce cevap verdim :) Downvote gereksiz/doğrulanmamıştı. –

İlgili konular