2011-07-21 49 views
5

Farz edelim ki girişleri ve çıkışları bir dizi çeken basit bir C++ programı var. o giriş ve çıkışlarBir C++ programını çalıştırmak ve test etmek için python kullanma

bu programı çalıştırmak için bir piton senaryo yazmaya Daha önce Python kullanmadıysanız, ancak bu mümkün
$ ./game 
$ what kind of game? type r for regular, s for special. 
$ r 
$ choose a number from 1 - 10 
$ 1 
$ no try again 
$ 2 
$ no try again 
$ 5 
$ yes you WIN! 

, yayınları: Bu (gerçek programı çok daha karmaşık ama yine de metin tabanlı) gibi sonuçlar standart çıktıya mı? Ben C++ kullanarak çalıştırmak hakkında here soru sordum ama çok karmaşık görünüyor. Beni bazı kod örneklerine yönlendirebilmen harika olurdu. Herhangi bir yardım takdir edilecektir.

+0

Ayrıca "expect" (http://en.wikipedia.org/wiki/Expect) 'ı da dikkate almak isteyebilirsiniz. – aschepler

cevap

3

pexpect'u kullanın.

Normal stdin/stdout boruları genellikle işe yaramaz, çünkü üst ve alt süreçlerdeki standart kitaplık olanakları, bir dosya tanıtıcısı TTY olmadığında (isatty çağrısı aracılığıyla) G/Ç'yi daha agresif bir şekilde tamponlama eğilimindedir. Açıkçası, bu koda sahip olduğunuzdan bunu ebeveynte düzeltebilirsiniz; sadece uygun noktalarda yıkayın. Ancak genellikle çocuk süreci, sahip olmadığınız önceden varolan bazı kodları çalıştırıyor. Pexpect modülü, çocuk sürecini bir konsola konuştuğunu düşünerek utandırıcı bir pseudo-tty'yi besler. Bu, xterm ve rxvt kullanımı gibi GUI terminallerinin aynı hiledir.

1

Komut satırı seçeneklerini test etmek için bir Python aracı olan Cram ile ilgilenebilirsiniz.

0

Eğer buna bağlıysanız, expect'un bir Python sürümünü içeren test çerçevemi kullanabilirsiniz. Orijinal expect programı, bunun gibi etkileşimli programlarla "sohbet etmenizi" sağlar. Ancak bu çerçeve, bunun yerine kullanabileceğiniz bir Python expect.py modülü içerir.

http://code.google.com/p/pycopia/

modülü işlemi alt paketin içinde bkz.

Ayrıca pexpect'i de kullanabilirsiniz, ama kendi yazdım çünkü bunu sevmedim.

İlgili konular