Saya mencoba menjalankan program/paket python dengan beberapa perintah bash khusus di dalam py3. Sisa kode python murni berfungsi tetapi perintah bash ini memberi saya banyak kesulitan dalam mendapatkan file output. Saat ini, saya menggunakan perintah ini di dalam Python 3 (file py)

import os
os.system("now=$(date +%Y-%m-%d)")
os.system("-d biden_${now}.txt --function=linear -f trump_${now}.txt")
os.system("-i trump_${now}.txt --daemon --quiet --port 8022")

Tetapi di direktori keluaran saya harus mendapatkan file dengan nama seperti

biden_2021-01-03.txt and trump_2021-01-03.txt

Yang harus menyertakan tanggal hari ini. Ketika saya mencoba melakukan ini melalui memperbaiki nama file, ia melakukan operasi yang diperlukan dari program/paket python tetapi ketika saya mencoba membuatnya menyesuaikan berdasarkan operasi file tanggal, itu hanya memberi saya file dengan nama:

biden_.txt and trump_.txt

Tapi tanpa tanggal di dalamnya. Dapatkah seseorang tolong bimbing saya di mana saya melakukan kesalahan atau solusi yang lebih mudah untuk mencapai ini? Saya menjalankan ini di/menggunakan Python 3.5.3, sistem Operasi Debian GNU/Linux 9, Kernel: Linux 4.9.0-9-amd64, Arsitektur: x86-64.

0
Napster 4 Januari 2021, 00:52

3 jawaban

Jawaban Terbaik

os.system membuat subkulit baru untuk setiap panggilan, sehingga variabel env now tidak tersedia di panggilan berikutnya.

Anda dapat langsung membuat string tanggal dengan Python dan meneruskannya sebagai string format:

now = datetime.datetime.now().date().isoformat()
os.system("-d biden_{now}.txt --function=linear -f trump_{now}.txt".format(now=now))
os.system("-i trump_{now}.txt --daemon --quiet --port 8022".format(now=now))

Atau Anda dapat meletakkan variabel now di lingkungan Python dan merujuknya ke dalam panggilan os.system:

os.environ['now'] = datetime.datetime.now().date().isoformat()
os.system("-d biden_${now}.txt --function=linear -f trump_${now}.txt")
os.system("-i trump_${now}.txt --daemon --quiet --port 8022")
2
maurice 3 Januari 2021, 22:06

Jika ini hanya untuk nama file, Anda dapat mencapainya dengan modul datetime.

>>> from datetime import datetime
>>> today_date = datetime.today().strftime('%Y-%m-%d')
>>> cmd = f"-d biden_{today_date}.txt --function=linear -f trump_{today_date}.txt"
>>> cmd
'-d biden_2021-01-03.txt --function=linear -f trump_2021-01-03.txt'
3
abc 3 Januari 2021, 22:06

Panggilan os.system muncul di shell baru. Lihat sampel

Contoh1:

os.system("now=$(date +%Y-%m-%d)")
os.system("echo $now")

Contoh2:

os.system("now=$(date +%Y-%m-%d); echo $now")
2021-01-03

Anda dapat menggabungkan menjadi sesuatu seperti

os.system("echo \"Your file name is biden`date +%Y-%m-%d`.txt\"")
Your file name is biden2021-01-03.txt

Tapi waktu Anda perlahan akan bergeser, tergantung berapa lama proses Anda akan memakan waktu.

Jika Anda tidak ingin waktu Anda melayang, tetapi untuk mencocokkan waktu mulai Anda, gunakan tanggal python sebagai sementara diposting oleh < a href="https://stackoverflow.com/users/1359058/abc">abc

1
Peter Novotny 3 Januari 2021, 22:13