从AWS文档中,我理解:
但是,这些规则似乎过于宽松.
例如,如果我创建一个名为"../../d"的密钥,当我尝试使用GET OBJECT API访问它时会发生400 ERROR.有趣的是,访问'../d'没问题.
是否有文件说明什么是合法的?
在我的应用程序中,我推荐相关的应用程序,但只想推荐它们,如果它们实际上可以安装在设备上(例如相关应用程序的目标国家/地区的设备,正确的操作系统版本等).请参阅https://developer.android.com/google/play/filters.html
我正在为一个工具构建一个bash完成脚本,该脚本与curl共享文件上传语义.
使用curl,您可以:
curl -F var = @ file
上传文件.
我的应用程序具有类似的语义,我希望能够在按下'@'后显示可能的文件.不幸的是,这证明是困难的:
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [[ "$cur" == @* && "$prev" == '=' ]]; then
COMPREPLY=( $(compgen -f ${cur:1}) )
return 0
fi
Run Code Online (Sandbox Code Playgroud)
因此,如果命令(到目前为止)以以下结尾:
abc=@
Run Code Online (Sandbox Code Playgroud)
将显示当前目录中的文件.
var=@/usr/
/usr/bin /usr/games
Run Code Online (Sandbox Code Playgroud)
问题是,如果我真的按Tab键完成,'@'就会消失!
var=/usr/bin
Run Code Online (Sandbox Code Playgroud)
所以看起来bash用标签式COMPREPLY替换整个当前单词.
避免这种情况的唯一方法是这样做:
COMPREPLY=( $(compgen -f ${cur:1}) )
for (( i=0; i<${#COMPREPLY[@]}; i++ ));
do
COMPREPLY[$i]='@'${COMPREPLY[$i]}
done
Run Code Online (Sandbox Code Playgroud)
但是现在标签的完成看起来很奇怪:
@/usr/bin @/usr/games
Run Code Online (Sandbox Code Playgroud)
反正有没有显示正常的文件标签完成(没有'@'前缀)但在点击标签时保留'@'?
情况:
new_pipe = os.open(pipe_path, os.O_RDONLY | os.O_NONBLOCK) # pipe_path points to a FIFO
data = os.read(new_pipe, 1024)
Run Code Online (Sandbox Code Playgroud)
读取偶尔会引发错误-11:资源暂时不可用.
什么时候出现这个错误?这似乎非常罕见,因为常见情况返回数据:
我正在筛选一些网络跟踪,并在我自己的机器上注意到,当我通过HTTP连接时,数据包看起来像:
client --> server: GET
server --> client: tcp ack
server --> client: HTTP response
client --> server: tcp ack
Run Code Online (Sandbox Code Playgroud)
但是,我查看了几年前我保存的一些CIFS(SMB)跟踪.我看到的东西是:
client --> server: Create Request
server --> client: Create response (This packet also acks the request)
Run Code Online (Sandbox Code Playgroud)
在高层次上,我想知道为什么差异 - 导致不同行为的原因是什么?什么控制应用程序响应是否放在请求ack或其他数据包上:应用程序还是操作系统?
我有一个问题,popen是死锁.具体来说,运行popen的线程(不是主线程)被卡在:
File: "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File: "/usr/lib/python2.7/subprocess.py", line 1224, in _execute_child
data = _eintr_retry_call(os.read, errpipe_read, 1048576)
File: "/usr/lib/python2.7/subprocess.py", line 478, in _eintr_retry_call
return func(*args)
Run Code Online (Sandbox Code Playgroud)
使用ps,我可以看到python进程已经自行分叉,但它还没有运行os.execvp.通过检查ps可以看出这一点,我看到主进程的子进程具有相同的名称.杀死该进程会导致父进程中的卡住线程恢复.
据我所知,子进程(将execvp)锁定在其创建和运行os.execvp之间的50行中的某个位置.使事情复杂化的情况很少见; 也许100个popens中有1个.这种锁定怎么会发生?我如何解决它?(我不能在一个简单的python程序中重现这种行为).
我应该注意,虽然这个程序是令人难以置信的多线程(运行数百个线程),但没有其他线程分叉或使用popen.许多其他线程正在使用文件描述符(主要是套接字).
技术说明:
场景:在Ubuntu 12.4 lxc主机上运行debootstrapped Ubuntu 11.4 lxc guest虚拟机(均为64位)
在lxc guest中,rsyslogd经常与SIGABRT崩溃,说明:
libgcc_s.so.1 must be installed for pthread_cancel to work
0334.380551272:7f4128a84700:
Signal 6 (SIGABRT) occured, execution must be terminated.
Run Code Online (Sandbox Code Playgroud)
我不确定为什么找不到libgcc_s.so.1.如果我运行ldconfig -p:
$# ldconfig -p | grep libgcc
libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
libgcc_s.so.1 (libc6) => /usr/lib32/libgcc_s.so.1
Run Code Online (Sandbox Code Playgroud)
它被列出.这两个链接都是有效的.
我该如何解决这个问题?
编辑:objdump -T输出请求:
/lib/x86_64-linux-gnu/libgcc_s.so.1: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
00000000000025d8 l d .init 0000000000000000 .init
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 memset
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 abort
0000000000000000 w D *UND* 0000000000000000 __gmon_start__
0000000000000000 w D …Run Code Online (Sandbox Code Playgroud) 我有一个正则表达式来检测unicode字符串中的无效xml 1.0字符:
bad_xml_chars = re.compile(u'[^\x09\x0A\x0D\u0020-\uD7FF\uE000-\uFFFD\U00010000-\U0010FFFF]', re.U)
Run Code Online (Sandbox Code Playgroud)
在Linux/python2.7上,这非常有效.在Windows上引发以下内容:
File "C:\Python27\lib\re.py", line 190, in compile
return _compile(pattern, flags)
File "C:\Python27\lib\re.py", line 242, in _compile
raise error, v # invalid expression
sre_constants.error: bad character range
Run Code Online (Sandbox Code Playgroud)
任何想法为什么这不是在Windows上编译?
场景:我有很多进程需要通过网络获取文件.如果文件已经下载,我希望它缓存在磁盘上.如果另一个进程正在下载该文件,则阻止直到完成下载.
我一直在努力寻找最简单的方法.显而易见的方法是:
create file w/ an exclusive lock active on it only if it doesn't exist (O_CREAT | O_EXCL)
if file exists already:
open file and acquire exclusive lock
else:
download to newly created file
release lock
Run Code Online (Sandbox Code Playgroud)
该系统通过(看似)没有竞争条件来实现上述目标
不幸的是,我找不到有关如何使用open()等创建一个在Linux中锁定的文件的文档.如果我将创建步骤拆分为:
open w/ O_CREAT | O_EXCL
flock
Run Code Online (Sandbox Code Playgroud)
现在,创建和锁定之间存在竞争条件(非创建进程在创建者执行之前获取锁定).
我意识到我可以在每个文件中使用一个外部锁定文件(例如filename +'.lock),这是我在尝试创建文件名之前获得的,但这感觉...不优雅(我现在需要担心如何实际拥有一个文件.lock后缀!)
反正原子创建和锁定它(如Windows提供)或外部锁定文件方法几乎是标准/必需的?
在我的文档中,我偶尔会使用"垃圾"网址作为示例,并且不希望它们成为无处的超链接.是否有任何语法使这些网址不是超链接?