有没有办法将os.path.basename(__file__)
更改为当前正在运行的脚本中执行的文件的名称?
我创建了一个简单的自我复制文件。它首先访问根目录。然后,它会对所有可写的子目录进行排序,并从列表中选择一个随机的子目录。之后,它会写一个随机字符串作为名称的.py文件。然后使用os.path.basename(__file__)
检索文件名并将行复制到新写入的文件中。完成所有操作后,它会执行新创建的文件,该文件会再次重复该过程。但是,在第二轮中,它会保留__file__
作为原始文件名,而不是新生成的文件。
此部分存储原始目录路径和文件名
import os
import random
orig_dir = os.getcwd()
orig_file = os.path.basename(__file__)
这部分是文件编写过程和新文件的执行。 注意:路径变量是根目录中随机选取的子目录,其中包含新写入的文件。
file_create = open(rand_name, "w")
file_create.close()
file_create = open(rand_name, "a")
os.chdir(orig_dir)
copy_file = open(orig_file, "r")
for line in copy_file.readlines():
file_create.write(line)
file_create.close()
copy_file.close()
os.chdir(path)
exec(open(rand_name).read())
更新 我在下面发布了整个脚本。我也有一些粗暴和丑陋的方法让它发挥作用,但我更专注于手头的问题。
import os
import random
orig_dir = os.getcwd()
orig_file = os.path.basename(__file__)
for loop in range(20):
os.chdir("..")
root = os.getcwd()
direct = []
for items in os.listdir():
if os.path.isdir(items) and os.access(items, os.W_OK) and os.access(items, os.R_OK):
direct.append(items)
path = os.path.join(os.getcwd(), random.choice(direct))
rand_name = str(random.randint(1, 10000000000)) + ".py"
os.chdir(path)
print(path)
# prevents the creation of a duplicate file name in the same location.
# If it is, loops the name generator until a valid name is generated
while True:
if os.path.isfile(rand_name):
rand_name = str(random.randint(1, 10000000000)) + ".py"
else:
break
file_create = open(rand_name, "w")
file_create.close()
file_create = open(rand_name, "a")
os.chdir(orig_dir)
copy_file = open(orig_file, "r")
for line in copy_file.readlines():
file_create.write(line)
file_create.close()
copy_file.close()
os.chdir(path)
os.execl(rand_name, ''),
os.exec(path, '')
是我尝试的最后一个解决方案,但它开始返回PermissionError: [Errno 13] Permission denied
。我尝试使用sudo权限运行它,并返回相同的权限错误。