2016-04-10 18 views
1

Programım için bir MyCmd CLI oluşturmak için Python Cmd2 modülünü (Cmd'den devralın) kullanma. Çoğu durumda, komut dosyasını normalde yerleşik komutlarla kullanıyorum. "Çık" komutu, komut dosyası için bir miktar temizleme yapmak ve daha sonra çıkmak için uygulanır. Cmd2 modülü raw_input üzerinden giriş bekler.Python Cmd'nin cmdloop komutunu programla enjekte etme

Belirli bir durumda, komut satırında yayımlamak yerine programdan çıkıp "çıkmak" yerine programlamak istiyorum. Bu işlem, bir REST API'sının, komut dosyasının ana iş parçacığı üzerinde çıkmayı başlatmak için bir "çıkış" POST çevirdiği ayrı bir iş parçacığı aracılığıyla yapılır.

Benzer bir şey yapmak isteyen birkaç SO soruları buldum, ancak tam olarak böyle değil. Aşağıdaki örneği izlemeyi denedim, ancak şu işe yaramadı: Python StringIO - selectively place data into stdin

Sonra basit bir şey denedim. Temelde iplikten aşağıda yaptı:

sys.stdin = StringIO('quit\n') 
sys.stdin.flush() 

kelime 'çıkın' enjekte edildi, ama senaryo onun temiz çıkış yapmazdı gibi görünüyor. Bununla birlikte, komut satırına geri dönebilir ve sadece temizleme ve çıkış sürecini tetikleyen Enter'a basabilirim. ‘\ N’ nın neden Enter olarak yorumlanmadığından emin değil.

Benim cmd basitçe aşağıdaki şekilde çağrılır:

mycmd = MyCmd() 
mycmd.cmdloop() 

nasıl düzgün bir Cmd ait cmdloop içine ‘çıkın’ enjekte edebilir?

+0

['Cmd.postcmd'] (https://docs.python.org/2/library/cmd.html#cmd.Cmd.postcmd) 'yi geçersiz kılmak mı istiyorsunuz? –

+0

Anlatabildiğim kadarıyla, herhangi bir yöntemi doğrudan çağırmak, cmdloop'un dışına çağrıldıkları için işe yaramaz. Bu nedenle, True (son cmdloop'a) dönüşü, cmdloop'un dışına çıkan çağrı koduna göre cmdloop'a geçmez. – bhairav

cevap

0

cmd.onecmd ("quit") yöntemini denediniz mi? Tercümana komutları enjekte etmek için kullanılabileceğini düşünüyorum.

İlgili konular