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:

Kod: Markera allt

echo $USER

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-script

Kod: 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

Kod: Markera allt

import os
print(os.environ['minvariabel'])
och kör det såhär tex

Kod: Markera allt

minvariabel=elefant python programmet.py
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:

Kod: Markera allt

minvariabel=elefant python programmet.py
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.