Bir Python programında işletim sisteminin argv [0] gerçek değerini elde etmek istiyorum. Python'un sys.argv [0] değeri bu değer değildir: yürütülmekte olan Python betiğinin adıdır (bazı istisnalar hariç). İstediğim yerine "foo.py" yazdırırİşletim Sisteminin Python'daki argv [0] (sys.argv [0] değil) nasıl elde edilir?
önemsiz programı
#! /usr/bin/env python
import sys
print sys.argv[0]
olarak çalıştırıldığında "someString" yazdırır bir foo.py olduğunu.
Bunu nasıl elde edeceğini bilen var mı? Python C API'sinde bazı ilgili işlevler vardır: ör. Py_GetProgramName. Ancak bu, Python dünyasına herhangi bir yerde maruz kalıyor gibi görünmüyor. Py_GetProgramFullPath argv [0] 'dan çalışır, ancak bir Python yorumlayıcısının yolunu bulmaya çalışır. (Bu değer sys.executable için yayılır, böylece değişken de doğru değildir.) Bu değeri almak için gerçekten C modülü yazmam gerekiyor mu?
Düzeltme: Ayrıca (ama yardımcı olmadı yanıtlanan) here.
#!/usr/bin/env python
import sys
print sys.argv[0]
f = open('/proc/self/cmdline', 'rb')
cmdline = f.read()
f.close()
print repr(cmdline.split('\x00'))
Ve çıkışı:
Linux'ta
Bu bir bash hatası değil, 'exec' komutu kabuğu başka bir programla değiştirir. – interjay
Ooh, şeytan. Bu taşınabilirlik sorunları varsa şaşırmazdım ama benim için iyi. – pkgw
@interjay Görüyorum, teşekkürler! – vz0