Sida 1 av 1
python subprocess
Postat: 24 januari 2026, 17:02:09
av Oltronix
Hur får man fram shell-enviroment-variabler-data i python? På något likande sätt
Kod: Markera allt
import subprocess
var="USER"
result = subprocess.run(['echo', var], capture_output=True, text=True)
print(result.stdout)
På motsvarande sätt i shell:
Re: python subprocess
Postat: 24 januari 2026, 17:22:33
av Icecap
När jag programmerar via en ST-LINK, skriver jag:
callstring = <en massa med stm32_programmer_cli.exe o parameter o skit>
result = subprocess.run(callstring, capture_output=True)
code = result.returncode # I detta fall är 0=inget fel, allt OK
Ska du jobba vidare i Python med result-texten:
pythontext = result.stdout.decode('utf-8')
Re: python subprocess
Postat: 24 januari 2026, 17:24:08
av guckrum
os.environ
Re: python subprocess
Postat: 24 januari 2026, 17:32:43
av Oltronix
Jag har en fil med data som jag vill läsa var den ligger till ett python-program. text /home/erik/Album1/Rubrik Den kan ligga på olika ställen beroende på olika album tex /home/erik/Album3/Rubrik.
Adressen till den aktuella filen kan ligga i en fil eller en shell-variabel. Har inte besämt mig hur ännu
Re: python subprocess
Postat: 24 januari 2026, 17:48:03
av Oltronix
Jag har ett pythonprogram som skapar olika fotoalbum. Jag vill inte ha "samma" pythonprogrammet på olika mappar där fotona finns. Då är det är svårt att hålla reda på versioner då jag ändrar programmet ofta emellanåt. Dock är det vissa data som är specifika för varje album som jag läser in i programmet. Tex albumets namn, vilka är människorna på bilderna, mm (jag har caption på varje bild men vill ha mera data i separat fil). Den albumspecifika datan finns där bilderna ligger.
Jag har ett lokalt shell-script för varje album som sparkar igång den genensamma pythonprogrammet men jag måste även överföra den lokala informationen till pythonprogrammet. Jag kan ha all data i shell-scriptet. Det har jag fått fungera med subprocess men är även nyfiken att veta hur man läser shell-varibler.
Re: python subprocess
Postat: 24 januari 2026, 18:03:04
av Oltronix
guckrum skrev: ↑24 januari 2026, 17:24:08os.environ
Jag får testa detta..
edit1:
Fungerar!
edit2:
Testade först detta:
https://unix.stackexchange.com/question ... hon-scriptKod: Markera allt
import subprocess
var = 'foobar'
first = subprocess.Popen(['/bin/echo', var], stdout=subprocess.PIPE)
second = subprocess.Popen(['bash', '/path/to/script', '--args'], stdin=first.stdou
second2= subprocess.check_output(['bash', '/path/to/script', '--args'], stdin=first.stdo
Men fattade inte hur variablen "var" fungerar här. "var" verkar vara menglös här.
Re: python subprocess
Postat: 24 januari 2026, 19:02:02
av Icecap
Min tanke är att 'var' är som en parameter till programmet som kallas.
Typ: <program som kallas> <'var'> <...fler parameter...>
Re: python subprocess
Postat: 24 januari 2026, 20:31:13
av guckrum
Jag var kanske lite kortfattad tidigare. Minimalt pythonprogram
och kör det såhär tex
kommer den att skriva ut "elefant". Så då har du skickat en shell-variabel in i Pythonprogrammet, och det var så jag uppfattade frågeställningen.
Det känns som att du skall ha ett enda pythonprogram som löser ditt problem utan att blanda in några shellscript etc.
Antingen skapar du en fil som innehåller en katalog per rad som programmet skall titta i, eller så använder du
tex glob.glob() för att låta programmet hitta alla dina datafiler automatiskt och därefter loopa över dem. Hmm?
Re: python subprocess
Postat: 24 januari 2026, 23:17:47
av Oltronix
Så här ser koden ut:
Kod: Markera allt
ver=["2026-01-24", "2026-01-23", "2026-01-17", "2026-01-16", "2026-01-04", "12-18", "07-20", "2025-06-12"]
import datetime
with open("pre1.html") as f1: #read first part of html file
print(f1.read())
html0="""<div class="container">
Created {datum}<br>init.py ver {vers}<h2 style="text-align: center; margin-left: 400px; margin-right: 400px" > {rubrik}</h2>
<div class="row">
<div class="col-sm-8 col-md-2">
<div class="box">
<a href="./help.html">
<img src="./help.html" alt="Hjälp" style="width:100%">
</a>
</div>
</div>
<div class="col-sm-8 col-md-2">
<div class="box">
<a href="./person.html">
<img src="./person.html" alt="Personer" style="width:100%">
</a>
</div>
</div>"""
html =""" <div class="col-sm-8 col-md-2">
<div class="box">
<figure class="album-photoxxx">
<a href="./bilder/{Pic}>
<img src="./bilder/{Pic} alt="Lights" style="width:100%">
<figcaption>{cap}</figcaption>
</figure>
</a>
</div>
</div>"""
dat=datetime.datetime.now()
dat=dat.strftime("%Y-%m-%d %H:%M")
Rubrik="Rubrik-x"
with open(Rubrik) as f1:
rubrik1=f1.readline()
r2=f1.readline()
r3=f1.readline()
r4=f1.readline()
print(html0.format(datum = dat, vers=ver[0], rubrik=rubrik1+r2+r3+r4))
#print(html0.format(version = ver))
pic_lista="list"
with open(pic_lista) as f:
for line in f:
line=line.split()
if not line: #check if line empty
break #If yes exit loop
name=line[0]
try:
#caption=line[1] #check if second argument exists
str1=line[1:len(line)]
caption = " ".join(map(str, str1)) #list to string
except:
caption="nil cap" #no
name=name.rstrip()+'\"'
print(html.format(Pic = name, cap=caption.rstrip()))
with open("post.html") as f2: #read closing part of html file
print(f2.read())
Det är bla variablerna "pic_lista" och "Rubrik" som skall sättas till olika värden.
Jag kan använda:
med olika värden på "minvariabel" för att avgöra vilka data jag skall läsa in.
Tack! Jag gjorde problemet mer komplicerat än nödvändigt när jag använde pythons subprocess, men nu har gjort det och kanske lärt mig nått.