Ваше понимание списка возвращает пустые списки, когда корень не содержит .java
файлов.Когда ваш скрипт передает пустой список в fileinput.input()
, он возвращается к ожидаемому вводу по умолчанию от стандартного ввода.Поскольку из stdin ничего не поступает, ваш скрипт блокируется.
Попробуйте вместо этого:
def main():
for root, dirs, files in os.walk('target/generated-sources'):
java_files = [os.path.join(root, file) for file in files if file.endsWith('.java')]
if not java_files: # go to next iteration if list is empty
continue
for line in fileinput.input(java_files, inplace=True):
match = re.search(r'@Table\(name = "(.*)"\)', line)
output = "".join(['@Table(name = "', PREFIX, match.group(1)[MAX_TABLENAME_LEN - len(PREFIX)], '")', '\n']) if match else line
print output,
Либо разделите логику обнаружения файла.Далее создается генератор, который создает список файлов, которые затем можно использовать в качестве входных данных для fileinput
.
import os, fnmatch, fileinput
def find_files(directory, pattern):
"Generator that returns files within direction with name matching pattern"
for root, dirs, files in os.walk(directory):
for basename in fnmatch.filter(files, pattern):
filename = os.path.join(root, basename)
yield filename
for line in fileinput.input(find_files("target/generated-sources", "*.java")):
match = re.search(r'@Table\(name = "(.*)"\)', line)
output = "".join(['@Table(name = "', PREFIX, match.group(1)[MAX_TABLENAME_LEN - len(PREFIX)], '")', '\n']) if match else line
print output,