Python subprocess modülünü, yeni süreçler (process) oluşturmak, bu süreçlerin girdilerine ve çıktılarının bağlanmak, dönüş kodlarını ve/veya çıktılarını almak için kullanabilirsiniz. Bu yazıda, subprocess modülünün temellerini; harici komutları nasıl çalıştıracağınızı, girdi ve çıktıyı nasıl yönlendireceğinizi ve hataları nasıl ele alacağınızı inceleyeceğiz. İster yeni başlıyor olun ister deneyimli bir Python geliştiricisi, bu eğitim, projelerinizde subprocess modülünü etkili biçimde kullanmanız için gerekli bilgi birikimini sağlayacaktır.
Python Subprocess nedir?
Python subprocess modülü, Python kodunuzdan başka programları veya komutları çalıştırmanıza olanak tanıyan bir araçtır. Yeni programlar açmak, onlara veri göndermek ve sonuçları geri almak için kullanılabilir.
Python subprocess modülünü kullanmak, komut istemine doğrudan yazmak yerine komutları Python ile bilgisayarınıza vermeye benzer. Bu modül, görevleri otomatikleştirmeyi ve diğer programları Python kodunuzla entegre etmeyi kolaylaştırır. Örneğin, subprocess modülünü kullanarak ls veya ping gibi bir kabuk komutunu çalıştırabilir ve bu komutun çıktısını Python kodunuzda elde edebilirsiniz. Ayrıca Windows üzerinde .exe dosyaları gibi diğer Python betiklerini veya çalıştırılabilir dosyaları da çalıştırabilirsiniz.
Buna ek olarak, subprocess modülü sürecin girdisini ve çıktısını yönlendirebilir; yani, sürece hangi verilerin gönderileceğini ve ondan hangi verilerin alınacağını kontrol edebilirsiniz.
Subprocess modülünün en kullanışlı yeteneklerinden biri, alt süreç tarafından üretilen girdileri, çıktıları ve hataları (genellikle stderr) yönetmenizi sağlamasıdır. check=True ile CalledProcessError yükseltilir ve e.stdout/e.stderr alanlarını inceleyebilirsiniz. Bu özellik, modülün en güçlü yönlerinden biri olarak kabul edilir. Bu sayede subprocess çağırma süreci daha güçlü ve esnek hale gelir. Örneğin, subprocess çıktısını Python betiğinizin geri kalanında bir değişken olarak kullanmanız artık mümkündür.
Python Subprocess ne zaman kullanılır
Python subprocess modülünü ne zaman kullanmanız gerektiğine bakalım.
Sistem görevlerini otomatikleştirme
Subprocess modülü; yedekleme çalıştırma, servis başlatma/durdurma ve cron işlerlerini zamanlama gibi çeşitli sistem görevlerini otomatikleştirmek için kullanılabilir. Örneğin, bir dosyanın yedeğini oluşturmak için cp komutunu çalıştırabilir veya systemctl (modern Linux) ya da service (eski sistemler) ile servisleri başlatıp durdurabilirsiniz. Ayrıca zamanlama araçlarını (Linux’ta cron veya Windows’ta Görev Zamanlayıcı gibi) subprocess ile tetikleyebilirsiniz; ancak zamanlamanın kendisi bu araçlar tarafından gerçekleştirilir, subprocess tarafından değil.
Komut satırı araçlarını çalıştırma
Subprocess modülü grep, sed ve awk gibi komut satırı araçlarını çalıştırmak ve çıktılarını Python kodunuzda işlemek için kullanılabilir. Örneğin, bir dosyada belirli bir deseni aramak için grep komutunu çalıştırabilir ve ardından çıktıyı Python kodunuzda işleyebilirsiniz. Bu, günlük analizi, veri işleme ve metin düzenleme gibi görevler için yararlı olabilir.
Harici çalıştırılabilir dosyaları çalıştırma
Subprocess modülü, Windows’taki .exe dosyaları gibi diğer çalıştırılabilir dosyaları çalıştırabilir ve davranışlarını kontrol edebilir. Örneğin, belirli bir görevi yapan bir çalıştırılabilir dosyayı çalıştırabilir ve ardından onun çıktısını kendi kodunuzda kullanabilirsiniz. Bu, görüntü işleme, veri analizi ve makine öğrenimi görevleri için faydalıdır.
Betikleri arka plan süreci olarak çalıştırma
Subprocess modülünü, ana program sonlandıktan sonra da çalışmaya devam edecek şekilde betikleri arka plan süreci olarak çalıştırmak için kullanabilirsiniz. Örneğin, belirli bir görevi yerine getiren bir betiği çalıştırıp, betiğin tamamlanmasını beklemeden ana programdan çıkabilirsiniz. Bu, izleme, günlükleme ve veri toplama gibi işler için kullanışlıdır.
Python dışı yorumlayıcılarla betik çalıştırma
Subprocess modülü, Perl, Ruby ve Bash gibi diğer dillerde yazılmış betikleri çalıştırmanıza yardımcı olabilir. Örneğin, belirli bir görevi gerçekleştiren bir Perl betiğini çalıştırabilir ve onun çıktısını kendi kodunuzda kullanabilirsiniz. Bu, veri işleme, metin düzenleme ve sistem yönetimi için yararlı olabilir.
Paralel işlem
Subprocess modülü birden fazla süreci paralel olarak çalıştırmak için kullanılabilir; bu da görüntü işleme, veri analizi ve makine öğrenimi gibi görevler için faydalıdır. Örneğin, aynı betiğin birden çok örneğini, her biri verinin farklı bir bölümünü işleyecek şekilde çalıştırabilir ve ardından sonuçları birleştirebilirsiniz.
Bu eğitimdeki kodu çevrimiçi olarak çalıştırın ve düzenleyin
Kodu çalıştırPython Subprocess Örnekleri
Şimdi bazı Python subprocess örneklerine bakalım.
python subprocess run
subprocess.run() metodu, bir alt süreci çalıştırıp tamamlanmasını beklemek için kullanışlı bir yoldur. Çalıştırılacak komutu seçmenize ve argümanlar, ortam değişkenleri ve girdi/çıktı yönlendirmeleri gibi seçenekler eklemenize olanak tanır. Alt süreç başlatıldıktan sonra run() metodu, süreç tamamlanana kadar bloklar ve alt sürecin dönüş kodu ile çıktısını içeren bir CompletedProcess nesnesi döndürür.
subprocess.run() metodu çeşitli argümanlar alır; bunlardan bazıları şunlardır:
-
args: Çalıştırılacak komut ve argümanları; string listesi olarak geçilir. -
capture_output: True olarak ayarlanırsa standart çıktı ve standart hata yakalanır. -
text: True olarak ayarlanırsa stdout ve stderr string olarak döner; aksi halde bytes döner. -
check: Alt sürecin dönüş kodunun kontrol edilip edilmeyeceğini belirten boolean. check true ise ve dönüş kodu sıfır değilseCalledProcessErroryükseltilir. -
timeout: Zaman aşımı öncesinde alt sürecin tamamlanması için beklenecek süre (saniye cinsinden). -
shell: Komutun bir kabuk içinde çalıştırılıp çalıştırılmayacağını belirten boolean. Bu, komutun string olarak geçirildiği ve joker karakter genişletme, değişken yerleştirme gibi kabuğa özgü özelliklerin kullanılabildiği anlamına gelir.
subprocess.run() metodu ayrıca aşağıdaki özniteliklere sahip bir CompletedProcess nesnesi döndürür:
-
args: Çalıştırılan komut ve argümanlar. -
returncode: Alt sürecin dönüş kodu. -
stdout: Alt sürecin standart çıktısı (text=True ise string, aksi halde bytes). stderr: Alt sürecin standart hatası (text=True ise string, aksi halde bytes).
Örnek 1: Kabuk komutlarını çalıştırma:
import subprocess
result = subprocess.run("dir", shell=True, capture_output=True, text=True)
print(result.stdout)
Çıktı:
Volume in drive C has no label.
Volume Serial Number is E414-A41C
Directory of C:\Users\owner
01/25/2023 10:56 AM <DIR> .
01/25/2023 10:56 AM <DIR> ..
07/19/2021 01:19 PM <DIR> .anaconda
07/19/2021 01:19 PM <DIR> .astropy
07/19/2021 01:19 PM <DIR> .aws
09/12/2022 08:48 AM 496 .bash_history
03/27/2022 03:08 PM <DIR> .cache
09/26/2021 06:58 AM <DIR> .conda
09/26/2021 06:59 AM 25 .condarc
…
Linux/macOS için şunu kullanın: result = subprocess.run(["ls", "-la"], capture_output=True, text=True) (shell argümanı gerekmez).
Örnek 2: Python betiklerini çalıştırma:
subprocess.run() metodunu kullanarak bir Python betiği de çalıştırabilirsiniz. .py dosyasında basit bir Python betiği oluşturarak başlayalım
print(“This is the output from subprocess module”)
Bu dosyayı my_python_file.py olarak kaydedin. Şimdi bu dosyayı çalıştırmak için subprocess modülünü kullanabilirsiniz:
import subprocess
import sys
result = subprocess.run([sys.executable, "my_python_file.py"], capture_output=True, text=True)
print(result.stdout)
Çıktı:
This is the output from subprocess module
Örnek 3: Python kodunu doğrudan bir fonksiyondan çalıştırma:
Basit kullanım senaryolarında, subprocess.run() fonksiyonuna doğrudan bir Python komutu geçebilirsiniz. İşte nasıl yapılacağı:
result = subprocess.run([sys.executable, "-c", "print('This is directly from a subprocess.run() function')"], capture_output = True, text = True)
print(result.stdout)
Çıktı:
This is directly from a subprocess.run() function
args listesinde ilk öğe olan sys.executable, geçerli Python yorumlayıcısının yolunu dinamik olarak çözümler. Bu, çalışan süreçle tutarlılık sağlar ve "C:/..." gibi sabit yolları kullanma ihtiyacını ortadan kaldırır. İkinci öğe "-c", bir betik yerine sonraki string’in Python kodu olarak çalıştırılmasını sağlar. sys.executable’a erişmek için daima import sys ekleyin.
Örnek 4: check argümanını kullanma
check argümanı, Python subprocess modülündeki subprocess.run() fonksiyonunun isteğe bağlı bir argümanıdır. Çalıştırılan komutun dönüş kodunun kontrol edilip edilmeyeceğini belirleyen bir boole değeridir.
check True olarak ayarlandığında, fonksiyon komutun dönüş kodunu kontrol eder ve dönüş kodu sıfır değilse bir CalledProcessError istisnası yükseltir. İstisna, dönüş kodu, stdout, stderr ve command özniteliklerine sahip olur.
check False (varsayılan) olarak ayarlandığında, fonksiyon dönüş kodunu kontrol etmez ve komut başarısız olsa bile istisna yükseltmez.
import subprocess
result = subprocess.run(["python", "file_donot_exist.py"], capture_output=True, text=True, check=True)
print(result.stdout)
print(result.stderr)
Çıktı:
---------------------------------------------------------------------------
CalledProcessError Traceback (most recent call last)
<ipython-input-81-503b60184db8> in <module>
1 import subprocess
----> 2 result = subprocess.run(["python", "file_donot_exist.py"], capture_output=True, text=True, check=True)
3 print(result.stdout)
4 print(result.stderr)
~\anaconda3\lib\subprocess.py in run(input, capture_output, timeout, check, *popenargs, **kwargs)
514 retcode = process.poll()
515 if check and retcode:
--> 516 raise CalledProcessError(retcode, process.args,
517 output=stdout, stderr=stderr)
518 return CompletedProcess(process.args, retcode, stdout, stderr)
CalledProcessError: Command '['python', 'file_donot_exist.py']' returned non-zero exit status 2.
Komutun, file_donot_exist.py mevcut olmadığından başarısız olduğuna dikkat edin. check=True ayarladığınızda süreciniz başarısız olur; buna karşılık, check=False iken süreç başarısız olmaz, bunun yerine hata mesajını stdout’ta alırsınız.
import subprocess
result = subprocess.run(["python", "my_python_file2.py"], capture_output=True, text=True, check=False)
print(result.stdout)
print(result.stderr)
Çıktı:
python: can't open file 'my_python_file2.py': [Errno 2] No such file or directory
python subprocess Popen
subprocess.Popen(), alt süreçleri çalıştırmak için daha düşük seviyeli bir arabirimdir; subprocess.run ise kullanım kolaylığı için tasarlanmış, Popen üzerine kurulmuş daha yüksek seviyeli bir sarmalayıcıdır.
Popen, yeni bir süreç başlatmanıza ve onun standart girdi, çıktı ve hata akışlarıyla etkileşim kurmanıza olanak tanır. Süreç tamamlanana kadar beklemek, dönüş kodunu kontrol etmek veya süreci sonlandırmak için kullanılabilecek, çalışan sürecin bir tanıtıcısını döndürür.
run(), bir komutu tek çağrıda çalıştırıp çıktısını yakalamanızı sağlayan daha kullanışlı bir fonksiyondur; böylece bir Popen nesnesi oluşturup akışları kendiniz yönetmeniz gerekmez. Ayrıca komutun nasıl çalıştırılacağına dair çeşitli seçenekler belirtmenize olanak tanır; örneğin komut başarısız olursa istisna yükseltilip yükseltilmeyeceği gibi.
Genel olarak, yalnızca bir komutu çalıştırıp çıktısını yakalamanız gerekiyorsa run() kullanın; giriş/çıkış akışlarıyla etkileşim gibi süreç üzerinde daha fazla denetime ihtiyaç duyuyorsanız Popen tercih edin.
Popen sınıfı, çalıştırılacak komutu belirleyen args ve stdin, stdout, stderr, shell, cwd ve env gibi diğer isteğe bağlı argümanlar dahil olmak üzere run() ile aynı argümanları alır. Ayrıca Popen sınıfının, süreçle etkileşim kurmanızı sağlayan communicate(), poll(), wait(), terminate() ve kill() gibi çeşitli metotları vardır.
import subprocess
p = subprocess.Popen(["python", "--help"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
output, errors = p.communicate()
print(output)
Çıktı:
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-b : issue warnings about str(bytes_instance), str(bytearray_instance)
and comparing bytes/bytearray with str. (-bb: issue errors)
-B : don't write .pyc files on import; also PYTHONDONTWRITEBYTECODE=x
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser; also PYTHONDEBUG=x
-E : ignore PYTHON* environment variables (such as PYTHONPATH)
…
Bu, python –help komutunu çalıştırır ve Popen türünde yeni bir nesne oluşturur; bu nesne p değişkeninde saklanır. Komutun standart çıktısı ve hatası communicate() yöntemiyle yakalanır ve sırasıyla output ve errors değişkenlerinde tutulur.
subprocess.Popen, sürece girdi göndermek, ondan çıktı almak veya tamamlanmasını beklemek gibi süreç üzerinde daha fazla kontrol istediğinizde kullanışlıdır.
python subprocess call
subprocess.call(), Python subprocess modülünde bir komutu ayrı bir süreçte çalıştırıp tamamlanmasını beklemek için kullanılan bir fonksiyondur. Komutun dönüş kodunu döndürür; komut başarılıysa sıfır, başarısızsa sıfır olmayan bir değer döner.
call() fonksiyonu, çalıştırılacak komutu belirleyen args ve stdin, stdout, stderr, shell, cwd ve env gibi diğer isteğe bağlı argümanlar dahil olmak üzere run() ile aynı argümanları alır.
Komutun standart çıktısı ve hatası, stdout ve stderr argümanlarıyla yönlendirilmediği sürece, ebeveyn sürecin stdout ve stderr’ine gönderilir.
import sys
import subprocess
return_code = subprocess.run([sys.executable, "--version"]).returncode
if return_code == 0:
print("Command executed successfully.")
else:
print("Command failed with return code", return_code)
Çıktı:
Command executed successfully.
Bu, python -–version komutunu ayrı bir süreçte çalıştırır ve tamamlanmasını bekler. Komutun dönüş kodu, başarılıysa sıfır, başarısızsa sıfır olmayan bir değer olacak şekilde return_code değişkeninde saklanır.
subprocess.call(), bir komutu çalıştırıp dönüş kodunu kontrol etmek istediğiniz ancak çıktıyı yakalamanız gerekmediği durumlarda kullanışlıdır.
python subprocess check_output
check_output, run()’a benzer bir subprocess fonksiyonudur; ancak yalnızca komutun standart çıktısını döndürür ve dönüş kodu sıfır değilse CalledProcessError istisnası yükseltir.
check_output() fonksiyonu, run() ile aynı argümanları alır; çalıştırılacak komutu belirleyen args ve stdin, stderr, shell, cwd ve env gibi isteğe bağlı argümanlar dahil. Komutun standart çıktısını bytes nesnesi olarak veya (text=True ise) string olarak döndürür. Komut başarısız olursa (sıfır olmayan çıkış durumu) CalledProcessError yükseltir.
Not: Varsayılan olarak check_output() sadece stdout’u yakalar. stderr’i de çıktıya dahil etmek için açıkça stderr=subprocess.STDOUT kullanarak yönlendirin.
import subprocess
import sys
try:
output = subprocess.check_output([sys.executable, "--version"], text=True)
print(output)
except subprocess.CalledProcessError as e:
print(f"Command failed with return code {e.returncode}")
Çıktı:
Python 3.8.8
Python Subprocess Pipe
Python subprocess modülü, başka programları veya komutları çalıştırmak için kullanılabilecek alt süreçler oluşturma ve onlarla etkileşim kurma imkanı sağlar. Subprocess modülünün özelliklerinden biri de ebeveyn ve alt süreçler arasında iletişime olanak tanıyan pipe’lar (boru hatları) oluşturmaktır.
Pipe, tek yönlü bir iletişim kanalıdır; bir sürecin standart çıktısını diğerinin standart girdisine bağlar. Bir komutun çıktısını başka bir komutun girdisine bağlayarak ilk komutun çıktısının ikinci komut için girdi olarak kullanılmasını sağlar.
Pipe’lar, Popen sınıfında stdout veya stdin argümanı subprocess.PIPE olarak belirtilerek oluşturulabilir.
Örneğin, aşağıdaki kod, ls komutunun çıktısını grep komutunun girdisine bağlayan bir pipe oluşturur; bu da çıktıyı "file" kelimesini içeren satırlarla sınırlayarak filtreler:
import subprocess
ls_process = subprocess.Popen(["ls"], stdout=subprocess.PIPE, text=True)
grep_process = subprocess.Popen(
["grep", "sample"],
stdin=ls_process.stdout,
stdout=subprocess.PIPE,
text=True
)
ls_process.stdout.close() # POSIX-only: prevents deadlocks by closing the pipe
output, error = grep_process.communicate()
print(output)
print(error)
Çıktı:
sample_data
Bu örnekte, Popen sınıfı ls komutu için bir, grep komutu için bir olmak üzere iki alt süreç oluşturmak için kullanılır. ls komutunun stdout’u, iki süreç arasında bir pipe oluşturan subprocess.PIPE kullanılarak grep komutunun stdin’ine bağlanır. communicate() yöntemi, ls komutunun çıktısını grep komutuna göndermek ve filtrelenmiş çıktıyı almak için kullanılır.
Sonuç
Python subprocess modülü, başka programları çalıştırmanıza veya Python betiğiniz içinden komutlar vermenize olanak tanıyan, alt süreçler oluşturmak ve onlarla etkileşim kurmak için güçlü ve esnek bir yol sağlar. subprocess.call() gibi basit komutlardan pipe’lar, girdi/çıktı yönlendirme ve ortam değişkenleri geçirme gibi gelişmiş özelliklere kadar subprocess modülü, hemen her kullanım durumu için bir şey sunar. Tekrarlayan görevleri otomatikleştirmek, sistem komutları çalıştırmak ve hatta diğer programlama dilleri ve platformlarla etkileşim kurmak için harika bir yöntemdir.
Subprocess modülüyle çalışırken, harici komutları çalıştırmanın özellikle shell=True parametresi kullanıldığında veya temizlenmemiş girdi geçirildiğinde güvenlik riski oluşturduğunu unutmayın. Komutun nasıl çalıştırılacağına dair çeşitli seçenekler belirtmenize olanak tanıyan subprocess.run() fonksiyonunu kullanmak; örneğin komut başarısız olursa istisna yükseltmek gibi; her zaman iyi bir uygulamadır.
Python ile komut satırı otomasyonunun sınırsız olasılıklarına derinlemesine dalmak isterseniz, Command Line Automation in Python kursumuza göz atın. Bu kursta, bir dosya sisteminde gezinip belirli bir deseni izleyen dosyaları arayan ve ardından çeşitli durumlarda dosyaların yinelenip yinelenmediğini belirleyen otomasyon kodu yazmayı öğreneceksiniz. Kursu tamamladıktan sonra Unix süreçlerini yönetebilecek ve onlarla etkileşim kurabilecek, ayrıca çok çeşitli rutin dosya sistemi etkinliklerini otomatikleştirebileceksiniz.
DataCamp for Business ile Ekibinizin Python Becerilerini Geliştirin
Siz veya ekibiniz Python ve komut satırı otomasyonu konusunda becerilerinizi geliştirmek istiyorsanız DataCamp for Business’ı keşfetmeyi düşünün. DataCamp, her ölçekten ekip için uyarlanmış öğrenme çözümleri sunarak işletmelerin hızla değişen teknoloji dünyasında önde kalmasına yardımcı olur. DataCamp for Business ile ekibinizi Python, otomasyon ve diğer temel veri bilimi araçlarında uzmanlık kazandıracak kurslar ve özel öğrenme yollarıyla geliştirebilirsiniz. İster bir girişim ister kurumsal ölçekte olun, DataCamp for Business ekibinizin öğrenme hedeflerine ulaşması için gereken kaynakları ve esnekliği sağlar. Daha fazla bilgi almak için bugün bir demo talep edin.
Python Subprocess SSS
subprocess.call() ile subprocess.run() arasındaki fark nedir?
subprocess.call(), bir komutu çalıştırıp tamamlanmasını bekleyen ve komutun dönüş kodunu döndüren bir fonksiyondur. subprocess.run() ise daha güçlüdür; bir komutu çalıştırmanıza, çıktısını yakalamanıza ve komutun başarısız olması durumunda istisna yükseltilip yükseltilmeyeceği gibi komutun nasıl çalıştırılacağına dair çeşitli seçenekler belirtmenize olanak tanır.
subprocess kullanarak Python’da bir komutu nasıl çalıştırır ve çıktısını nasıl yakalarım?
Bir komutu tek çağrıda çalıştırıp çıktısını yakalamak için subprocess.run() fonksiyonunu kullanabilirsiniz. Örneğin, aşağıdaki kod ls komutunu çalıştırır ve çıktısını result değişkeninde yakalar:
import subprocess
result = subprocess.run(["ls"], stdout=subprocess.PIPE)
print(result.stdout.decode())
Bir alt süreçte bir komuta değişkenleri argüman olarak nasıl aktarabilirim?
Subprocess içinde bir komuta değişkenleri argüman olarak, subprocess.run() veya subprocess.Popen() fonksiyonlarına geçirilen listede dahil ederek aktarabilirsiniz. Örneğin, aşağıdaki kod echo komutunu çalıştırır ve message değerini argüman olarak geçirir:
import subprocess
message = "Hello, World!"
subprocess.run(["echo", message])
Bir komutun çıktısını subprocess kullanarak nasıl bir dosyaya yönlendiririm?
Bir komutun çıktısını bir dosyaya yönlendirmek için komutta > operatörünü kullanabilirsiniz. Örneğin, aşağıdaki kod ls komutunu çalıştırır ve çıktısını ls.txt adlı dosyaya yönlendirir:
import subprocess
subprocess.run("ls > ls.txt", shell=True)Subprocess kullanarak bir komutu arka planda nasıl çalıştırırım?
Yeni bir süreç oluştururken subprocess.Popen() ile start_new_session parametresini True yaparak bir komutu arka planda çalıştırabilirsiniz. Bu, komutu arka planda çalıştırmanıza olanak tanıyan yeni bir süreç grubu oluşturur.
import subprocess
subprocess.Popen(["ls"], start_new_session=True)
Subprocess ile çalıştırılan bir komutun dönüş kodunu nasıl kontrol ederim?
Bir komutun dönüş kodunu, subprocess.run() tarafından döndürülen subprocess.CompletedProcess nesnesinin returncode özniteliğine erişerek kontrol edebilirsiniz. Örneğin, aşağıdaki kod ls komutunu çalıştırır ve dönüş kodunu kontrol eder:
import subprocess
result = subprocess.run(["ls"])
if result.returncode == 0:
print("Command ran successfully")
else:
print("Command failed with error code", result.returncode)
Subprocess ile çalıştırılan bir komuta ortam değişkenlerini nasıl aktarırım?
Bir komuta ortam değişkenleri, bir sözlükte tanımlanıp subprocess.Popen() veya subprocess.run() ile yeni bir süreç oluştururken env parametresi olarak geçirilerek verilebilir. Örneğin, aşağıdaki kod TEST_VAR ortam değişkenini ayarlar ve printenv komutunu çalıştırır:
import subprocess
env = {'TEST_VAR': 'test_value'}
subprocess.run(["printenv", "TEST_VAR"], env=env)

