может там и с Х проблема, но я бы для начала избавился от кавычечной чехарды, которую вы устроили. Для комбинации переменных и строк используйте f-strings - пример выше я давал
Спасибо! Я попробовал от неуместных кавычек избавиться. Получилось вот что.
x = input()
copy = 'pyperclip.copy('
close = ')'
print(f'{copy}\'{x}\'{close}')
# результат будет на выходе такой pyperclip.copy('введенное значение x')
С этим вроде бы ок. Удобно работать с f, спасибо, не знал раньше про это, только про r знал.
Но дальше возникли проблемы, когда я попытался это применить.
import os, pyperclip, subprocess, os.path
x = pyperclip.paste()
print('Как назвать файл?')
y = input()
folder = 'D:/test/'
file_name = f'{y}.py'
path = os.path.join(folder, file_name)
copy = 'pyperclip.copy('
close = ')'
with open(path,'w') as tw:
tw.write(r"import os, pyperclip, subprocess \n {copy}/'{x}/'{close}")
Создается файл с вот только такой одной строчкой. Строчки почему-то не две.
import os, pyperclip, subprocess /n {copy}/'{x}/'{close}
Слеши в разные стороны ставил, это ничего не меняет идейно в этом случае))
А что будет, если в буфере обмена, а потом и в переменной x окажется значение '); import os; os.system("удалить все файлы"); #?
Вот этого я не знаю, к сожалению)
Такая ситуация называется инъекцией
. Чтобы её избежать, нужно специально превращать строки в строковые литералы (например, на Lua это делают при помощи string.format("%q", любое_значение)
) или как-то по-другому их кодировать (например, в base64
, где точно не может быть кавычек).
Спасибо! Почему-то программа ругается на string. Говорит, что не знает - что это)) Я почитал по ссылке, но как эту ошибку убрать - не знаю.