在Python中,以下代码片段将在执行时打开交互式shell.
import code; code.interact(local = locals())Run Code Online (Sandbox Code Playgroud)
事实证明,这对于在相当多的文档中进行调试非常有用.即使没有调试器,也可以使用shell来导航程序内环境并找出正在发生的事情.到现在为止还挺好.
现在是挑战.
我正在使用的软件(顺便说一下,用Django编写)使用某种调度机制,然后对另一个 Python进程说话,除了编辑代码之外我无法控制.除了我发送给它进行处理的变量之外,我没有任何输入.
但是,由于文档很差,我不知道代码是如何工作的,所以我想用这个code.interact方法来解决问题.
但是这个过程是通过一些特殊的调度软件在后台的某个地方启动的,所以流程不会从Django应用程序转到我想要检查的部分.相反,发送信号和对象,然后在完全不同的过程中在任意时间(10-200ms之间的任何时间)运行.当接收到信号和对象时,stdin/stdout完全不在图片中.
所以我认为不是使用stdin/stdout与之通信,code.interact而是可以通过指定readfunc参数来使用文件句柄或Unix套接字.我通过open()文件和套接字试过这个,但无济于事.
现在我试图仅仅从Django进程本身开始工作,所以即使是调度问题也是不可能的,当交互式shell确实启动时,它立即关闭,既不接受带有命令作为内容的文件,也不接受用于Python命令管道的Unix套接字.
使长话短说; 是否可以code.interact通过除stdin/stdout之外的其他方式调用的交互式shell进行通信?如果是这样,怎么样?
提前致谢.
虽然在akka中使用TCP或UDP连接到java.net.InetSocketAddress相对容易,但API中的SocketAddress和Unix-socket似乎没有等价物.
对于我目前的项目,我需要使用Unix-Socket 连接到Docker Remote-API.有没有办法使用akka这样做或我需要使用不同的方法?
我有两个程序,一个服务器和一个客户端.服务器打开文件,向其写入数据,然后通过unix域套接字将其文件描述符发送到客户端.一切正常,直到我介绍一个socat代理.
socat -x -v UNIX-LISTEN:/tmp/unixSockSendFe,mode=775,reuseaddr,fork UNIX-CONNECT:/tmp/unixSockSendFd
Run Code Online (Sandbox Code Playgroud)
说明
服务器侦听/tmp/unixSockSendFd,socat连接到它(UNIX-CONNECT:/tmp/unixSockSendFd),并创建UNIX-LISTEN:/tmp/unixSockSendFe,mode=775,reuseaddr,fork客户端连接的另一个Unix域套接字().客户端和服务器之间的任何通信都通过中继socat,打印以二进制(-x选项)和ascii(-v选项)形式发送的字节.
如果我不使用socat,并且客户端直接连接到服务器(在 /tmp/unixSockSendFd套接字上),一切正常,但当socat用作代理时,客户端崩溃时出现分段错误.
服务器
/*Server code - sendfd.c*/
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>
char *socket_path = "/tmp/unixSockSendFd";
char *file="/tmp/abcd.txt" ;/*file whose fd is to be sent*/
int sendfd(int sock, int fd);
int recvfd(int s);
char data[]="sahil\0";
int main(int argc, char *argv[]) {
struct sockaddr_un addr;
char buf[100]; …Run Code Online (Sandbox Code Playgroud) 在TCP服务器中,我知道拒绝连接可能是因为
ECONNREFUSED尝试连接到UNIX域套接字时可能的原因是什么.
这个问题是为了帮助我缩小Solaris 10配置上的MySQL连接之谜.
我有一个为 unix 域套接字运行的 uwsgi 服务器
[uwsgi]
...
socket = /var/run/someuwsgi.sock
socket = localhost:9987
...
Run Code Online (Sandbox Code Playgroud)
mod_proxy_uwsgi 已安装
在 apache 配置中有这一行:ProxyPass /some uwsgi://localhost:9987
它正在发挥作用。
问题:通过 unix 域套接字 /var/run/someuwsgi.sock 的 apache 配置行应该是什么?我试过
ProxyPass /some uwsgi:///var/run/someuwsgi.sock
Run Code Online (Sandbox Code Playgroud)
并得到
Bad Request
Your browser sent a request that this server could not understand.
Run Code Online (Sandbox Code Playgroud)
也试过
ProxyPass /some uwsgi://unix:///var/run/someuwsgi.sock
Run Code Online (Sandbox Code Playgroud)
并得到
Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /some/.
Reason: DNS lookup failure for: unix: …Run Code Online (Sandbox Code Playgroud) 一些参考:
语境:
nginx与设置upstream配置为发送请求到詹金斯.--httpPort 8080题:
有没有人做过类似的事情?我的google-fu没有帮助.
我有一些逻辑可以通过创建Unix域套接字来工作,并且在普通应用程序中运行时没有任何问题.但是,当我为app扩展运行时,我从bind()获得了一个带有errno = 48("Address in in use")的-1.
NSArray *applicationSupportDirectoryPaths =
NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask, YES);
int fd = socket(AF_UNIX, SOCK_STREAM, 0); // returns a non-zero value
NSString *loc = [applicationSupportDirectoryPaths[0] stringByAppendingPathComponent:@"usd"];
struct sockaddr_un addr;
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX ;
strncpy(addr.sun_path, [loc UTF8String], sizeof(addr.sun_path)-1);
int bindres = bind(fd, (struct sockaddr*)&addr, sizeof(addr)); // returns -1, error is 48
Run Code Online (Sandbox Code Playgroud)
库目录返回的位置是:
/var/mobile/Containers/Data/PluginKitPlugin/A8110BA2-5AE7-42C1-84DA-2A9B303C7277/Library/
Run Code Online (Sandbox Code Playgroud)
我认为这是失败的原因是因为这是一个特殊的位置,与应用程序的库目录相比.
如果有人有任何想法为什么会发生这种情况或任何变通方法,我很感激.
更新:我尝试了缓存目录(NSCachesDirectory),但现在我得到了错误3(没有这样的过程).
我需要将所有流量从指定端口转发到 Apache 中的 Unix 域套接字:
在sites-enabled/000-default.conf我定义了一个VirtualHost:
<VirtualHost *:8091>
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
ProxyPassReverse / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
在ports.conf我有:
Listen 80
Listen 8091
Run Code Online (Sandbox Code Playgroud)
我同时启用了proxy和proxy_httpmods:
krzysiek:/etc/apache2$ a2enmod proxy
Module proxy already enabled
krzysiek:/etc/apache2$ a2enmod proxy_http
Module proxy already enabled
Run Code Online (Sandbox Code Playgroud)
我正在使用 Apache 2.4.7,官方文档指出:
在 2.4.7 及更高版本中,通过使用前缀为 unix:/path/lis.sock| 的目标,可以支持使用 Unix 域套接字。
当我重新加载 Apache 时,出现错误:
krzysiek:/etc/apache2$ sudo service apache2 restart
* Restarting web server apache2 [fail]
* The apache2 …Run Code Online (Sandbox Code Playgroud) 有谁有使用 PostgREST 和 Cloud SQL 的经验吗?
我的 SQL 实例已准备好开放访问 (0.0.0.0/0),我可以使用云代理应用程序通过本地 PostGREST 访问它。
现在我想从同一个项目的实例运行 Postgrest,但我找不到支持 Cloud SQL 格式的 Postgrest URI 格式,因为 Google SQL Cloud 只使用像 /cloudsql/INSTANCE_CONNECTION_NAME
配置 1
db-uri = "postgres://postgres:password@/unix(/cloudsql/INSTANCE_CONNECTION_NAME)/mydatabase"
db-schema = "api"
jwt-secret = "OOcJ7VoSY1mXqod4MKtb9WCCwt9erJkRQ2tzYmLb4Xe="
db-anon-role = "web_anon"
server-port=3000
Run Code Online (Sandbox Code Playgroud)
退货 {"details":"could not translate host name \"unix(\" to address: Unknown host\n","code":"","message":"Database connection error"}
配置 2
db-uri = "postgres://postgres:password@/mydatabase?unix_socket=/cloudsql/INSTANCE_CONNECTION_NAME"
db-schema = "api"
jwt-secret = "OOcJ7VoSY1mXqod4MKtb9WCCwt9erJkRQ2tzYmLb4Xe="
db-anon-role = "web_anon"
server-port=3000
Run Code Online (Sandbox Code Playgroud)
解析器拒绝问号
{"details":"invalid URI query parameter: \"unix_socket\"\n","code":"","message":"Database connection error"}
配置 3
db-uri = …Run Code Online (Sandbox Code Playgroud) 我正在使用 Docker 19.03.8 并且想要设置两个容器:
两个容器通过该语句共享同一个网络networks。(我无法将 mysqld 套接字直接绑定安装到 PHP 容器中,因为 MySQL 版本不同,因此 MySQL 容器也不同)。
这是我的docker-compose.yml文件:
...
database:
build: .
volumes:
- /var/run/mysqld/mysqld.sock:/tmp/mysql.sock
...
Run Code Online (Sandbox Code Playgroud)
MySQL的Dockerfile :
FROM mysql:8.0.20
COPY my.cnf /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
my.cnf文件包含:
...
[mysql]
socket = /tmp/mysql.sock
[mysqld]
socket = /tmp/mysql.sock
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,我从 MySQL 容器收到此错误消息:
2020-05-20T11:30:04.708067Z 0 [ERROR] [MY-010270] [Server] Can't start server : Bind on unix socket: Address already in use
2020-05-20T11:30:04.708406Z 0 [ERROR] [MY-010258] [Server] Do you already …Run Code Online (Sandbox Code Playgroud)