#python #jupyter-notebook #subprocess
Вопрос:
У меня возникли проблемы при передаче этого ввода в качестве параметра этой функции
входные данные:
command = (
f"'{self.script_dir 'data.sh'}' "
f"-D '{self.data_dir}' "
f"-T '{self.tfds_dir}' "
f"-R '{self.records_dir}' "
f"-j {data_url} "
f"-a {annotations_url} "
f"-m {detections_url} "
f"-I '{self.params['img_dir']}' "
f"-r {self.params['use_records']} "
f"-d {self.params['dataset']} "
f"-i {self.params['download_images']} "
),
message='Data files downloaded.n'
функция:
def call_bash(command, message=None):
try:
output = subprocess.check_output(
command,
shell=True,
stderr=subprocess.STDOUT,
)
if message is not None:
print(message)
return output
except subprocess.CalledProcessError as e:
print(e.output)
print("Exiting program...")
sys.exit()
Он отлично работал на colab, но когда я запускал программу в ноутбуке jupyter, я получил эту синтаксическую ошибку:
f"'{self.script_dir 'data.sh'}' "
^
SyntaxError: invalid syntax
Комментарии:
1. добавить запятые? что именно вы хотите, чтобы он делал?
2. Если Jupyter работает на Python <= 3.5, то именно поэтому строка
f
-string выдает синтаксическую ошибку.3. нет, jupyter работает на версии 3.6.9, и эта команда должна проверять содержимое какого-либо параметра и каталога
4. этот ввод и функция на самом деле не записываются напрямую в ячейку, они были вызваны из скрипта .py с использованием !python
5. @drum: Вам не нужно добавлять запятые; смежные строковые литералы (включая f-строковые литералы) объединяются. Круглые скобки необходимы для того, чтобы они были смежными , операция не пытается создать a
tuple
, они просто пытаются определить длинный литерал f-строки в нескольких строках, чтобы их длина строк была разумной, а содержимое читаемым. Добавление запятых сделало бы егоtuple
состоящим из множества маленьких строк, а не из одной большой строки.